diff --git a/GitCandy.csproj b/GitCandy.csproj
new file mode 100644
index 0000000..f6764d5
--- /dev/null
+++ b/GitCandy.csproj
@@ -0,0 +1,828 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="..\packages\LibGit2Sharp.NativeBinaries.1.0.129\build\LibGit2Sharp.NativeBinaries.props" Condition="Exists('..\packages\LibGit2Sharp.NativeBinaries.1.0.129\build\LibGit2Sharp.NativeBinaries.props')" />
+ <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>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{8C65D667-BA60-4810-927A-F8AFB55D55FE}</ProjectGuid>
+ <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>GitCandy</RootNamespace>
+ <AssemblyName>GitCandy</AssemblyName>
+ <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+ <UseIISExpress>true</UseIISExpress>
+ <IISExpressSSLPort />
+ <IISExpressAnonymousAuthentication />
+ <IISExpressWindowsAuthentication />
+ <IISExpressUseClassicPipelineMode />
+ <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="ICSharpCode.SharpZipLib">
+ <HintPath>..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll</HintPath>
+ </Reference>
+ <Reference Include="LibGit2Sharp, Version=0.22.0.0, Culture=neutral, PublicKeyToken=7cbde695407f0333, processorArchitecture=MSIL">
+ <HintPath>..\packages\LibGit2Sharp.0.22.0\lib\net40\LibGit2Sharp.dll</HintPath>
+ <Private>True</Private>
+ </Reference>
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+ <Private>True</Private>
+ <HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
+ </Reference>
+ <Reference Include="NewLife.Core">
+ <HintPath>..\DLL\NewLife.Core.dll</HintPath>
+ </Reference>
+ <Reference Include="NewLife.Cube">
+ <HintPath>..\DLL\NewLife.Cube.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.Configuration" />
+ <Reference Include="System.ComponentModel.DataAnnotations" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Numerics" />
+ <Reference Include="System.Security" />
+ <Reference Include="System.Transactions" />
+ <Reference Include="System.Web" />
+ <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.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.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" />
+ <Reference Include="XCode">
+ <HintPath>..\DLL\XCode.dll</HintPath>
+ </Reference>
+ </ItemGroup>
+ <ItemGroup>
+ <Content Include="Content\bootstrap-theme.css" />
+ <Content Include="Content\bootstrap-theme.min.css" />
+ <Content Include="Content\bootstrap.css" />
+ <Content Include="Content\bootstrap.min.css" />
+ <Content Include="Entity\GitCandy数据字典.htm" />
+ <Content Include="fonts\glyphicons-halflings-regular.svg" />
+ <Content Include="fonts\glyphicons-halflings-regular.woff2" />
+ <Content Include="fonts\glyphicons-halflings-regular.woff" />
+ <Content Include="fonts\glyphicons-halflings-regular.ttf" />
+ <Content Include="fonts\glyphicons-halflings-regular.eot" />
+ <Content Include="Content\bootstrap.min.css.map" />
+ <Content Include="Content\bootstrap.css.map" />
+ <Content Include="Content\bootstrap-theme.min.css.map" />
+ <Content Include="Content\bootstrap-theme.css.map" />
+ <Content Include="Areas\GitCandy\Views\web.config" />
+ <Content Include="Entity\XCoder.log">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>XCoder.tt</DependentUpon>
+ </Content>
+ <None Include="packages.config">
+ <SubType>Designer</SubType>
+ </None>
+ <None Include="Properties\PublishProfiles\GitCandy.pubxml" />
+ <None Include="Scripts\jquery-2.0.3.intellisense.js" />
+ <None Include="Scripts\_references.js" />
+ <Content Include="Views\Shared\DisplayTemplates\Maps.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Maps.generated.cs</LastGenOutput>
+ </Content>
+ <None Include="Web.Debug.config">
+ <DependentUpon>Web.config</DependentUpon>
+ </None>
+ <None Include="Web.Release.config">
+ <DependentUpon>Web.config</DependentUpon>
+ </None>
+ </ItemGroup>
+ <ItemGroup>
+ <Content Include="Content\bootstrap-switch.css" />
+ <Content Include="Content\highlight.css" />
+ <Content Include="Content\Site.css" />
+ <Content Include="Entity\NewLife.GitCandy.xml" />
+ <Content Include="Entity\XCoder.tt">
+ <Generator>TextTemplatingFileGenerator</Generator>
+ <LastGenOutput>XCoder.log</LastGenOutput>
+ </Content>
+ <Content Include="Global.asax" />
+ <Content Include="Scripts\bootstrap.js" />
+ <Content Include="Scripts\bootstrap.min.js" />
+ <Content Include="Scripts\bootstrap3-typeahead.js" />
+ <Content Include="Scripts\bootstrap-switch.js" />
+ <Content Include="Scripts\common.js" />
+ <Content Include="Scripts\highlight.pack.js" />
+ <Content Include="Scripts\jquery-2.0.3.js" />
+ <Content Include="Scripts\marked.js" />
+ <Content Include="Views\Account\Change.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Change.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Account\Create.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Create.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Account\Delete.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Delete.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Account\Detail.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Detail.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Account\Edit.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Edit.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Account\Forgot.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Forgot.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Account\Index.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Index.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Account\Login.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Login.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Account\Ssh.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Ssh.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Home\About.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>About.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\Blame.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Blame.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\Blob.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Blob.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\Branches.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Branches.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\Commit.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Commit.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\Commits.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Commits.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\Compare.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Compare.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\Contributors.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Contributors.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\Coop.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Coop.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\Create.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Create.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\Delete.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Delete.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\Detail.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Detail.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\Edit.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Edit.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\Index.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Index.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\Tags.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Tags.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\Tree.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Tree.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\_BlobPreview.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>_BlobPreview.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\_BranchSelector.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>_BranchSelector.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\_Diff.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>_Diff.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\_GitUrlButton.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>_GitUrlButton.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\_PathBar.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>_PathBar.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\_ZipButton.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>_ZipButton.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Setting\Edit.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Edit.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Setting\ReGenSsh.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>ReGenSsh.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Setting\Restart.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Restart.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Shared\DisplayTemplates\Members.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Members.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Shared\DisplayTemplates\YesNo.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>YesNo.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Shared\Error.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Error.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Shared\_Layout.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>_Layout.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Shared\_Pager.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>_Pager.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Team\Create.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Create.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Team\Delete.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Delete.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Team\Detail.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Detail.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Team\Edit.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Edit.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Team\Index.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Index.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Team\Users.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Users.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Web.config" />
+ <Content Include="Views\_ViewStart.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>_ViewStart.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Web.config" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="App_GlobalResources\SR.designer.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>SR.resx</DependentUpon>
+ </Compile>
+ <Compile Include="App_GlobalResources\SR.fr.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>SR.fr.resx</DependentUpon>
+ </Compile>
+ <Compile Include="App_GlobalResources\SR.zh-Hans.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>SR.zh-Hans.resx</DependentUpon>
+ </Compile>
+ <Compile Include="App_Start\AppInfomation.cs" />
+ <Compile Include="App_Start\FilterConfig.cs" />
+ <Compile Include="App_Start\RouteConfig.cs" />
+ <Compile Include="App_Start\SshServerConfig.cs" />
+ <Compile Include="Areas\GitCandy\Controllers\RepositoryController.cs" />
+ <Compile Include="Areas\GitCandy\Controllers\AuthorizationLogController.cs" />
+ <Compile Include="Areas\GitCandy\Controllers\SshKeyController.cs" />
+ <Compile Include="Areas\GitCandy\Controllers\UserController.cs" />
+ <Compile Include="Areas\GitCandy\Controllers\UserRepositoryController.cs" />
+ <Compile Include="Areas\GitCandy\Controllers\UserTeamController.cs" />
+ <Compile Include="Areas\GitCandy\Controllers\GitController.cs" />
+ <Compile Include="Areas\GitCandy\GitCandyAreaRegistration.cs" />
+ <Compile Include="Base\FileHelper.cs" />
+ <Compile Include="Base\Pager.cs" />
+ <Compile Include="Base\Profiler.cs" />
+ <Compile Include="Base\RawResult.cs" />
+ <Compile Include="Base\RegularExpression.cs" />
+ <Compile Include="Base\StringLogicalComparer.cs" />
+ <Compile Include="Configuration\HostKey.cs" />
+ <Compile Include="Configuration\UserConfiguration.cs" />
+ <Compile Include="Controllers\AccountController.cs" />
+ <Compile Include="Controllers\CandyControllerBase.cs" />
+ <Compile Include="Controllers\GitController.cs" />
+ <Compile Include="Controllers\HomeController.cs" />
+ <Compile Include="Controllers\RepositoryController.cs" />
+ <Compile Include="Controllers\SettingController.cs" />
+ <Compile Include="Controllers\TeamController.cs" />
+ <Compile Include="Data\MembershipService.cs" />
+ <Compile Include="Data\RepositoryService.cs" />
+ <Compile Include="Entity\Entity\SSH密钥.Biz.cs" />
+ <Compile Include="Entity\Entity\SSH密钥.cs" />
+ <Compile Include="Entity\Entity\仓库.Biz.cs" />
+ <Compile Include="Entity\Entity\仓库.cs" />
+ <Compile Include="Entity\Entity\用户.Biz.cs" />
+ <Compile Include="Entity\Entity\用户.cs" />
+ <Compile Include="Entity\Entity\用户仓库.Biz.cs" />
+ <Compile Include="Entity\Entity\用户仓库.cs" />
+ <Compile Include="Entity\Entity\用户团队.Biz.cs" />
+ <Compile Include="Entity\Entity\用户团队.cs" />
+ <Compile Include="Entity\Entity\认证日志.Biz.cs" />
+ <Compile Include="Entity\Entity\认证日志.cs" />
+ <Compile Include="Extensions\CommitLogExtension.cs" />
+ <Compile Include="Extensions\HtmlHelperExtension.cs" />
+ <Compile Include="Extensions\MetadataExtension.cs" />
+ <Compile Include="Filters\AdministratorAttribute.cs" />
+ <Compile Include="Filters\AllowRegisterUserAttribute.cs" />
+ <Compile Include="Filters\AllowRepositoryCreationAttribute.cs" />
+ <Compile Include="Filters\CurrentUserOrAdministratorAttribute.cs" />
+ <Compile Include="Filters\PublicServerAttribute.cs" />
+ <Compile Include="Filters\ReadRepositoryAttribute.cs" />
+ <Compile Include="Filters\RepositoryOwnerOrSystemAdministratorAttribute.cs" />
+ <Compile Include="Filters\SmartAuthorizeAttribute.cs" />
+ <Compile Include="Filters\SmartGitAttribute.cs" />
+ <Compile Include="Filters\TeamOrSystemAdministratorAttribute.cs" />
+ <Compile Include="Git\ArchiverAccessor.cs" />
+ <Compile Include="Git\BlameAccessor.cs" />
+ <Compile Include="Git\Cache\GitCacheAccessor.cs" />
+ <Compile Include="Git\Cache\GitCacheReturn.cs" />
+ <Compile Include="Git\CommitsAccessor.cs" />
+ <Compile Include="Git\ContributorsAccessor.cs" />
+ <Compile Include="Git\GitService.cs" />
+ <Compile Include="Git\GitSshService.cs" />
+ <Compile Include="Git\HistoryDivergenceAccessor.cs" />
+ <Compile Include="Git\LastCommitAccessor.cs" />
+ <Compile Include="Git\RepositorySizeAccessor.cs" />
+ <Compile Include="Git\RevisionSummaryCacheItem.cs" />
+ <Compile Include="Git\ScopeAccessor.cs" />
+ <Compile Include="Git\SummaryAccessor.cs" />
+ <Compile Include="Global.asax.cs">
+ <DependentUpon>Global.asax</DependentUpon>
+ </Compile>
+ <Compile Include="Models\AheadBehindModel.cs" />
+ <Compile Include="Models\BlameHunkModel.cs" />
+ <Compile Include="Models\BlameModel.cs" />
+ <Compile Include="Models\BlobType.cs" />
+ <Compile Include="Models\BranchesModel.cs" />
+ <Compile Include="Models\BranchSelectorModel.cs" />
+ <Compile Include="Models\ChangePasswordModel.cs" />
+ <Compile Include="Models\CollaborationModel.cs" />
+ <Compile Include="Models\CommitChangeModel.cs" />
+ <Compile Include="Models\CommitModel.cs" />
+ <Compile Include="Models\CommitsModel.cs" />
+ <Compile Include="Models\CompareModel.cs" />
+ <Compile Include="Models\ContributorsModel.cs" />
+ <Compile Include="Models\GitUrl.cs" />
+ <Compile Include="Models\LoginModel.cs" />
+ <Compile Include="Models\PathBarModel.cs" />
+ <Compile Include="Models\RepositoryListModel.cs" />
+ <Compile Include="Models\RepositoryModel.cs" />
+ <Compile Include="Models\RepositoryModelBase.cs" />
+ <Compile Include="Models\RepositoryScope.cs" />
+ <Compile Include="Models\RepositoryStatisticsModel.cs" />
+ <Compile Include="Models\SettingModel.cs" />
+ <Compile Include="Models\SshModel.cs" />
+ <Compile Include="Models\TagModel.cs" />
+ <Compile Include="Models\TagsModel.cs" />
+ <Compile Include="Models\TeamListModel.cs" />
+ <Compile Include="Models\TeamModel.cs" />
+ <Compile Include="Models\TreeEntryModel.cs" />
+ <Compile Include="Models\TreeModel.cs" />
+ <Compile Include="Models\UserListModel.cs" />
+ <Compile Include="Models\UserModel.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="Security\Token.cs" />
+ <Compile Include="Ssh\Algorithms\CipherInfo.cs" />
+ <Compile Include="Ssh\Algorithms\CipherModeEx.cs" />
+ <Compile Include="Ssh\Algorithms\CompressionAlgorithm.cs" />
+ <Compile Include="Ssh\Algorithms\CompressionAlgorithmContract.cs" />
+ <Compile Include="Ssh\Algorithms\CtrModeCryptoTransform.cs" />
+ <Compile Include="Ssh\Algorithms\DiffieHellman.cs" />
+ <Compile Include="Ssh\Algorithms\DiffieHellmanGroupSha1.cs" />
+ <Compile Include="Ssh\Algorithms\DssKey.cs" />
+ <Compile Include="Ssh\Algorithms\EncryptionAlgorithm.cs" />
+ <Compile Include="Ssh\Algorithms\HmacAlgorithm.cs" />
+ <Compile Include="Ssh\Algorithms\HmacInfo.cs" />
+ <Compile Include="Ssh\Algorithms\KexAlgorithm.cs" />
+ <Compile Include="Ssh\Algorithms\KexAlgorithmContract.cs" />
+ <Compile Include="Ssh\Algorithms\NoCompression.cs" />
+ <Compile Include="Ssh\Algorithms\PublicKeyAlgorithm.cs" />
+ <Compile Include="Ssh\Algorithms\PublicKeyAlgorithmContract.cs" />
+ <Compile Include="Ssh\Algorithms\RsaKey.cs" />
+ <Compile Include="Ssh\ChannelOpenFailureReason.cs" />
+ <Compile Include="Ssh\DisconnectReason.cs" />
+ <Compile Include="Ssh\KeyUtils.cs" />
+ <Compile Include="Ssh\Messages\ConnectionServiceMessage.cs" />
+ <Compile Include="Ssh\Messages\Connection\ChannelCloseMessage.cs" />
+ <Compile Include="Ssh\Messages\Connection\ChannelDataMessage.cs" />
+ <Compile Include="Ssh\Messages\Connection\ChannelEofMessage.cs" />
+ <Compile Include="Ssh\Messages\Connection\ChannelFailureMessage.cs" />
+ <Compile Include="Ssh\Messages\Connection\ChannelOpenConfirmationMessage.cs" />
+ <Compile Include="Ssh\Messages\Connection\ChannelOpenFailureMessage.cs" />
+ <Compile Include="Ssh\Messages\Connection\ChannelOpenMessage.cs" />
+ <Compile Include="Ssh\Messages\Connection\ChannelRequestMessage.cs" />
+ <Compile Include="Ssh\Messages\Connection\ChannelSuccessMessage.cs" />
+ <Compile Include="Ssh\Messages\Connection\ChannelWindowAdjustMessage.cs" />
+ <Compile Include="Ssh\Messages\Connection\CommandRequestMessage.cs" />
+ <Compile Include="Ssh\Messages\Connection\ExitStatusMessage.cs" />
+ <Compile Include="Ssh\Messages\Connection\SessionOpenConfirmationMessage.cs" />
+ <Compile Include="Ssh\Messages\Connection\SessionOpenMessage.cs" />
+ <Compile Include="Ssh\Messages\DisconnectMessage.cs" />
+ <Compile Include="Ssh\Messages\KeyExchangeDhInitMessage.cs" />
+ <Compile Include="Ssh\Messages\KeyExchangeDhReplyMessage.cs" />
+ <Compile Include="Ssh\Messages\KeyExchangeInitMessage.cs" />
+ <Compile Include="Ssh\Messages\Message.cs" />
+ <Compile Include="Ssh\Messages\MessageAttribute.cs" />
+ <Compile Include="Ssh\Messages\NewKeysMessage.cs" />
+ <Compile Include="Ssh\Messages\ServiceAcceptMessage.cs" />
+ <Compile Include="Ssh\Messages\ServiceRequestMessage.cs" />
+ <Compile Include="Ssh\Messages\UnimplementedMessage.cs" />
+ <Compile Include="Ssh\Messages\UserauthServiceMessage.cs" />
+ <Compile Include="Ssh\Messages\Userauth\FailureMessage.cs" />
+ <Compile Include="Ssh\Messages\Userauth\PublicKeyOkMessage.cs" />
+ <Compile Include="Ssh\Messages\Userauth\PublicKeyRequestMessage.cs" />
+ <Compile Include="Ssh\Messages\Userauth\RequestMessage.cs" />
+ <Compile Include="Ssh\Messages\Userauth\SuccessMessage.cs" />
+ <Compile Include="Ssh\Services\Channel.cs" />
+ <Compile Include="Ssh\Services\ConnectionService.cs" />
+ <Compile Include="Ssh\Services\SessionChannel.cs" />
+ <Compile Include="Ssh\Services\SessionRequestedArgs.cs" />
+ <Compile Include="Ssh\Services\SshService.cs" />
+ <Compile Include="Ssh\Services\UserauthArgs.cs" />
+ <Compile Include="Ssh\Services\UserauthService.cs" />
+ <Compile Include="Ssh\Session.cs" />
+ <Compile Include="Ssh\SshConnectionException.cs" />
+ <Compile Include="Ssh\SshDataWorker.cs" />
+ <Compile Include="Ssh\SshServer.cs" />
+ <Compile Include="Ssh\StartingInfo.cs" />
+ <Compile Include="Views\Account\Change.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Change.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Account\Create.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Create.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Account\Delete.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Delete.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Account\Detail.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Detail.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Account\Edit.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Edit.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Account\Forgot.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Forgot.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Account\Index.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Index.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Account\Login.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Login.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Account\Ssh.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Ssh.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Home\About.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>About.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\Blame.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Blame.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\Blob.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Blob.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\Branches.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Branches.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\Commit.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Commit.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\Commits.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Commits.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\Compare.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Compare.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\Contributors.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Contributors.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\Coop.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Coop.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\Create.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Create.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\Delete.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Delete.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\Detail.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Detail.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\Edit.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Edit.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\Index.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Index.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\Tags.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Tags.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\Tree.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Tree.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\_BlobPreview.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>_BlobPreview.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\_BranchSelector.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>_BranchSelector.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\_Diff.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>_Diff.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\_GitUrlButton.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>_GitUrlButton.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\_PathBar.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>_PathBar.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\_ZipButton.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>_ZipButton.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Setting\Edit.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Edit.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Setting\ReGenSsh.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>ReGenSsh.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Setting\Restart.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Restart.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Shared\DisplayTemplates\Maps.generated.cs">
+ <DependentUpon>Maps.cshtml</DependentUpon>
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ </Compile>
+ <Compile Include="Views\Shared\DisplayTemplates\Members.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Members.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Shared\DisplayTemplates\YesNo.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>YesNo.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Shared\Error.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Error.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Shared\_Layout.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>_Layout.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Shared\_Pager.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>_Pager.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Team\Create.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Create.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Team\Delete.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Delete.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Team\Detail.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Detail.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Team\Edit.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Edit.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Team\Index.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Index.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Team\Users.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Users.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\_ViewStart.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>_ViewStart.cshtml</DependentUpon>
+ </Compile>
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="App_GlobalResources\SR.resx">
+ <Generator>PublicResXFileCodeGenerator</Generator>
+ <LastGenOutput>SR.designer.cs</LastGenOutput>
+ <SubType>Designer</SubType>
+ </EmbeddedResource>
+ <EmbeddedResource Include="App_GlobalResources\SR.fr.resx">
+ <Generator>ResXFileCodeGenerator</Generator>
+ <LastGenOutput>SR.fr.Designer.cs</LastGenOutput>
+ <SubType>Designer</SubType>
+ </EmbeddedResource>
+ <EmbeddedResource Include="App_GlobalResources\SR.zh-Hans.resx">
+ <Generator>PublicResXFileCodeGenerator</Generator>
+ <LastGenOutput>SR.zh-Hans.Designer.cs</LastGenOutput>
+ <SubType>Designer</SubType>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Properties\Information" />
+ <EmbeddedResource Include="Properties\CacheVersion" />
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" />
+ </ItemGroup>
+ <ItemGroup>
+ <Folder Include="Areas\GitCandy\Models\" />
+ <Folder Include="Areas\GitCandy\Views\Shared\" />
+ </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>
+ <PropertyGroup>
+ <PreBuildEvent>powershell.exe -ExecutionPolicy Unrestricted "$(ProjectDir)PreBuild.ps1" '$(ProjectDir)'</PreBuildEvent>
+ </PropertyGroup>
+ <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+ <PropertyGroup>
+ <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>
+ </PropertyGroup>
+ <Error Condition="!Exists('..\packages\LibGit2Sharp.NativeBinaries.1.0.129\build\LibGit2Sharp.NativeBinaries.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\LibGit2Sharp.NativeBinaries.1.0.129\build\LibGit2Sharp.NativeBinaries.props'))" />
+ </Target>
+ <ProjectExtensions>
+ <VisualStudio>
+ <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
+ <WebProjectProperties>
+ <UseIIS>True</UseIIS>
+ <AutoAssignPort>True</AutoAssignPort>
+ <DevelopmentServerPort>0</DevelopmentServerPort>
+ <DevelopmentServerVPath>/</DevelopmentServerVPath>
+ <IISUrl>http://localhost:1796/</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>
\ No newline at end of file
diff --git a/GitCandy.sln b/GitCandy.sln
index 7f1d2cf..c1ab84d 100644
--- a/GitCandy.sln
+++ b/GitCandy.sln
@@ -1,10 +1,12 @@
-Microsoft Visual Studio Solution File, Format Version 13.00
-# Visual Studio 2015
-VisualStudioVersion = 13
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GitCandy", "GitCandy\GitCandy.csproj", "{8C65D667-BA60-4810-927A-F8AFB55D55FE}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GitCandy.Web", "GitCandy.Web\GitCandy.Web.csproj", "{D1E514B2-2A79-4101-BB0D-FF2139FFD1EC}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -15,6 +17,10 @@ Global
{8C65D667-BA60-4810-927A-F8AFB55D55FE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8C65D667-BA60-4810-927A-F8AFB55D55FE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8C65D667-BA60-4810-927A-F8AFB55D55FE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D1E514B2-2A79-4101-BB0D-FF2139FFD1EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D1E514B2-2A79-4101-BB0D-FF2139FFD1EC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D1E514B2-2A79-4101-BB0D-FF2139FFD1EC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D1E514B2-2A79-4101-BB0D-FF2139FFD1EC}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/GitCandy.Web/App_GlobalResources/SR.designer.cs b/GitCandy.Web/App_GlobalResources/SR.designer.cs
new file mode 100644
index 0000000..2ca6da9
--- /dev/null
+++ b/GitCandy.Web/App_GlobalResources/SR.designer.cs
@@ -0,0 +1,1843 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace GitCandy.App_GlobalResources {
+ using System;
+
+
+ /// <summary>
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ /// </summary>
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ public class SR {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal SR() {
+ }
+
+ /// <summary>
+ /// Returns the cached ResourceManager instance used by this class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ public static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("GitCandy.App_GlobalResources.SR", typeof(SR).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ /// <summary>
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ public static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Account with this username already exists..
+ /// </summary>
+ public static String Account_AccountAlreadyExists {
+ get {
+ return ResourceManager.GetString("Account_AccountAlreadyExists", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Can't remove yourself.
+ /// </summary>
+ public static String Account_CantRemoveSelf {
+ get {
+ return ResourceManager.GetString("Account_CantRemoveSelf", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Change password.
+ /// </summary>
+ public static String Account_ChangePassword {
+ get {
+ return ResourceManager.GetString("Account_ChangePassword", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Change Password.
+ /// </summary>
+ public static String Account_ChangePasswordTitle {
+ get {
+ return ResourceManager.GetString("Account_ChangePasswordTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Conform Password.
+ /// </summary>
+ public static String Account_ConformPassword {
+ get {
+ return ResourceManager.GetString("Account_ConformPassword", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Register.
+ /// </summary>
+ public static String Account_CreateTitle {
+ get {
+ return ResourceManager.GetString("Account_CreateTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Account creation was unsuccessful. Please correct the errors and try again..
+ /// </summary>
+ public static String Account_CreationUnsuccessfull {
+ get {
+ return ResourceManager.GetString("Account_CreationUnsuccessfull", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Conform Delete User {0}.
+ /// </summary>
+ public static String Account_DeleteTitle {
+ get {
+ return ResourceManager.GetString("Account_DeleteTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Do you conform to delete the account "{0}"?.
+ /// </summary>
+ public static String Account_DeletionWords {
+ get {
+ return ResourceManager.GetString("Account_DeletionWords", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Description.
+ /// </summary>
+ public static String Account_Description {
+ get {
+ return ResourceManager.GetString("Account_Description", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to User {0}.
+ /// </summary>
+ public static String Account_DetailTitle {
+ get {
+ return ResourceManager.GetString("Account_DetailTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Edit User {0}.
+ /// </summary>
+ public static String Account_EditTitle {
+ get {
+ return ResourceManager.GetString("Account_EditTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Email.
+ /// </summary>
+ public static String Account_Email {
+ get {
+ return ResourceManager.GetString("Account_Email", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Account with this email already exists..
+ /// </summary>
+ public static String Account_EmailAlreadyExists {
+ get {
+ return ResourceManager.GetString("Account_EmailAlreadyExists", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Forgot username or password.
+ /// </summary>
+ public static String Account_ForgotPassword {
+ get {
+ return ResourceManager.GetString("Account_ForgotPassword", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Forgot Password.
+ /// </summary>
+ public static String Account_ForgotTitle {
+ get {
+ return ResourceManager.GetString("Account_ForgotTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Is system administrator.
+ /// </summary>
+ public static String Account_IsSystemAdministrator {
+ get {
+ return ResourceManager.GetString("Account_IsSystemAdministrator", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to List of Users.
+ /// </summary>
+ public static String Account_ListTitle {
+ get {
+ return ResourceManager.GetString("Account_ListTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Username or password error.
+ /// </summary>
+ public static String Account_LoginFailed {
+ get {
+ return ResourceManager.GetString("Account_LoginFailed", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Log in.
+ /// </summary>
+ public static String Account_LoginTitle {
+ get {
+ return ResourceManager.GetString("Account_LoginTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to New password.
+ /// </summary>
+ public static String Account_NewPassword {
+ get {
+ return ResourceManager.GetString("Account_NewPassword", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Nickname.
+ /// </summary>
+ public static String Account_Nickname {
+ get {
+ return ResourceManager.GetString("Account_Nickname", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Old password.
+ /// </summary>
+ public static String Account_OldPassword {
+ get {
+ return ResourceManager.GetString("Account_OldPassword", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Old password error.
+ /// </summary>
+ public static String Account_OldPasswordError {
+ get {
+ return ResourceManager.GetString("Account_OldPasswordError", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Password.
+ /// </summary>
+ public static String Account_Password {
+ get {
+ return ResourceManager.GetString("Account_Password", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Password error.
+ /// </summary>
+ public static String Account_PasswordError {
+ get {
+ return ResourceManager.GetString("Account_PasswordError", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Respositories.
+ /// </summary>
+ public static String Account_Repositories {
+ get {
+ return ResourceManager.GetString("Account_Repositories", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to SSH.
+ /// </summary>
+ public static String Account_SSH {
+ get {
+ return ResourceManager.GetString("Account_SSH", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to SSH Key.
+ /// </summary>
+ public static String Account_SshKeys {
+ get {
+ return ResourceManager.GetString("Account_SshKeys", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Teams.
+ /// </summary>
+ public static String Account_Teams {
+ get {
+ return ResourceManager.GetString("Account_Teams", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Account update was unsuccessful. Please correct the errors and try again..
+ /// </summary>
+ public static String Account_UpdateUnsuccessfull {
+ get {
+ return ResourceManager.GetString("Account_UpdateUnsuccessfull", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Username.
+ /// </summary>
+ public static String Account_Username {
+ get {
+ return ResourceManager.GetString("Account_Username", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Username or email.
+ /// </summary>
+ public static String Account_UsernameOrEmail {
+ get {
+ return ResourceManager.GetString("Account_UsernameOrEmail", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to {0} user(s) found.
+ /// </summary>
+ public static String Account_UsersFound {
+ get {
+ return ResourceManager.GetString("Account_UsersFound", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to GitCandy&copy; is a [Git](http://git-scm.com/documentation) distributed version control platform based on ASP.NET MVC application, which supports public and private repositories. You can create and collaborate your repository with your team anytime anywhere without any limit.
+ ///
+ ///Visit a demo on [http://gitcandy.com]()
+ ///
+ ///Get source and fork me on [http://github.com/Aimeast/GitCandy]()
+ ///
+ ///---
+ ///#### Thanks for (alphabet).
+ /// </summary>
+ public static String Home_AboutDescription {
+ get {
+ return ResourceManager.GetString("Home_AboutDescription", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to About.
+ /// </summary>
+ public static String Home_AboutTitle {
+ get {
+ return ResourceManager.GetString("Home_AboutTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to ahead.
+ /// </summary>
+ public static String Repository_Ahead {
+ get {
+ return ResourceManager.GetString("Repository_Ahead", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Read for anonymous.
+ /// </summary>
+ public static String Repository_AllowAnonymousRead {
+ get {
+ return ResourceManager.GetString("Repository_AllowAnonymousRead", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Write for anonymous.
+ /// </summary>
+ public static String Repository_AllowAnonymousWrite {
+ get {
+ return ResourceManager.GetString("Repository_AllowAnonymousWrite", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Repository with this name already exists..
+ /// </summary>
+ public static String Repository_AlreadyExists {
+ get {
+ return ResourceManager.GetString("Repository_AlreadyExists", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to authored at.
+ /// </summary>
+ public static String Repository_AuthoredAt {
+ get {
+ return ResourceManager.GetString("Repository_AuthoredAt", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Base branch.
+ /// </summary>
+ public static String Repository_BaseBranch {
+ get {
+ return ResourceManager.GetString("Repository_BaseBranch", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to behind.
+ /// </summary>
+ public static String Repository_Behind {
+ get {
+ return ResourceManager.GetString("Repository_Behind", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to This is a binary file that preview is not supported.
+ /// </summary>
+ public static String Repository_BinaryFileWrods {
+ get {
+ return ResourceManager.GetString("Repository_BinaryFileWrods", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Blame.
+ /// </summary>
+ public static String Repository_Blame {
+ get {
+ return ResourceManager.GetString("Repository_Blame", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to {2} at {1} · {0}.
+ /// </summary>
+ public static String Repository_BlameTitle {
+ get {
+ return ResourceManager.GetString("Repository_BlameTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to {2} at {1} · {0}.
+ /// </summary>
+ public static String Repository_BlobTitle {
+ get {
+ return ResourceManager.GetString("Repository_BlobTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Do you conform to delete the branch "{0}"?.
+ /// </summary>
+ public static String Repository_BranchDeletionWords {
+ get {
+ return ResourceManager.GetString("Repository_BranchDeletionWords", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Branches.
+ /// </summary>
+ public static String Repository_Branches {
+ get {
+ return ResourceManager.GetString("Repository_Branches", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Branches · {0}.
+ /// </summary>
+ public static String Repository_BranchesTitle {
+ get {
+ return ResourceManager.GetString("Repository_BranchesTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Summary: {0} changed files with {1} additions and {2} deletions..
+ /// </summary>
+ public static String Repository_ChangedSummary {
+ get {
+ return ResourceManager.GetString("Repository_ChangedSummary", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Collaborations.
+ /// </summary>
+ public static String Repository_Collaborations {
+ get {
+ return ResourceManager.GetString("Repository_Collaborations", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Collaborations · {0}.
+ /// </summary>
+ public static String Repository_CollaborationTitle {
+ get {
+ return ResourceManager.GetString("Repository_CollaborationTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Collaborators.
+ /// </summary>
+ public static String Repository_Collaborators {
+ get {
+ return ResourceManager.GetString("Repository_Collaborators", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Commits.
+ /// </summary>
+ public static String Repository_Commits {
+ get {
+ return ResourceManager.GetString("Repository_Commits", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to History for {1} · {0}.
+ /// </summary>
+ public static String Repository_CommitsTitle {
+ get {
+ return ResourceManager.GetString("Repository_CommitsTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to committed at.
+ /// </summary>
+ public static String Repository_CommittedAt {
+ get {
+ return ResourceManager.GetString("Repository_CommittedAt", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to {2} at {1} · {0}.
+ /// </summary>
+ public static String Repository_CommitTitle {
+ get {
+ return ResourceManager.GetString("Repository_CommitTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Compare.
+ /// </summary>
+ public static String Repository_Compare {
+ get {
+ return ResourceManager.GetString("Repository_Compare", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to There is nothing to compare.
+ /// </summary>
+ public static String Repository_CompareNothing {
+ get {
+ return ResourceManager.GetString("Repository_CompareNothing", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Compare · {0}.
+ /// </summary>
+ public static String Repository_CompareTitle {
+ get {
+ return ResourceManager.GetString("Repository_CompareTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Contributors.
+ /// </summary>
+ public static String Repository_Contributors {
+ get {
+ return ResourceManager.GetString("Repository_Contributors", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Contributors · {0}.
+ /// </summary>
+ public static String Repository_ContributorsTitle {
+ get {
+ return ResourceManager.GetString("Repository_ContributorsTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Copied.
+ /// </summary>
+ public static String Repository_Copied {
+ get {
+ return ResourceManager.GetString("Repository_Copied", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Copy to clipboard.
+ /// </summary>
+ public static String Repository_CopyToClipboard {
+ get {
+ return ResourceManager.GetString("Repository_CopyToClipboard", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Create Repository.
+ /// </summary>
+ public static String Repository_CreateTitle {
+ get {
+ return ResourceManager.GetString("Repository_CreateTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Repository creation was unsuccessful. Please correct the errors and try again..
+ /// </summary>
+ public static String Repository_CreationUnsuccessfull {
+ get {
+ return ResourceManager.GetString("Repository_CreationUnsuccessfull", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Current branch.
+ /// </summary>
+ public static String Repository_CurrentBranch {
+ get {
+ return ResourceManager.GetString("Repository_CurrentBranch", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Commits in current branch.
+ /// </summary>
+ public static String Repository_CurrentCommits {
+ get {
+ return ResourceManager.GetString("Repository_CurrentCommits", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Contributors in current branch.
+ /// </summary>
+ public static String Repository_CurrentContributors {
+ get {
+ return ResourceManager.GetString("Repository_CurrentContributors", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Files in current branch.
+ /// </summary>
+ public static String Repository_CurrentFiles {
+ get {
+ return ResourceManager.GetString("Repository_CurrentFiles", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Source size in current branch.
+ /// </summary>
+ public static String Repository_CurrentSourceSize {
+ get {
+ return ResourceManager.GetString("Repository_CurrentSourceSize", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Default branch.
+ /// </summary>
+ public static String Repository_DefaultBranch {
+ get {
+ return ResourceManager.GetString("Repository_DefaultBranch", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Commits in default branch.
+ /// </summary>
+ public static String Repository_DefaultCommits {
+ get {
+ return ResourceManager.GetString("Repository_DefaultCommits", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Contributors in default branch.
+ /// </summary>
+ public static String Repository_DefaultContributors {
+ get {
+ return ResourceManager.GetString("Repository_DefaultContributors", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Files in default branch.
+ /// </summary>
+ public static String Repository_DefaultFiles {
+ get {
+ return ResourceManager.GetString("Repository_DefaultFiles", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Source size in default branch.
+ /// </summary>
+ public static String Repository_DefaultSourceSize {
+ get {
+ return ResourceManager.GetString("Repository_DefaultSourceSize", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Conform Delete Repository {0}.
+ /// </summary>
+ public static String Repository_DeleteTitle {
+ get {
+ return ResourceManager.GetString("Repository_DeleteTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Do you conform to delete the repository "{0}"?.
+ /// </summary>
+ public static String Repository_DeletionWords {
+ get {
+ return ResourceManager.GetString("Repository_DeletionWords", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Description.
+ /// </summary>
+ public static String Repository_Description {
+ get {
+ return ResourceManager.GetString("Repository_Description", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Repository {0}.
+ /// </summary>
+ public static String Repository_DetailTitle {
+ get {
+ return ResourceManager.GetString("Repository_DetailTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Edit Repository {0}.
+ /// </summary>
+ public static String Repository_EditTitle {
+ get {
+ return ResourceManager.GetString("Repository_EditTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Push a repository with HEAD(master) branch for display here..
+ /// </summary>
+ public static String Repository_EmptyWords {
+ get {
+ return ResourceManager.GetString("Repository_EmptyWords", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Added.
+ /// </summary>
+ public static String Repository_FileAdded {
+ get {
+ return ResourceManager.GetString("Repository_FileAdded", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Copied.
+ /// </summary>
+ public static String Repository_FileCopied {
+ get {
+ return ResourceManager.GetString("Repository_FileCopied", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Deleted.
+ /// </summary>
+ public static String Repository_FileDeleted {
+ get {
+ return ResourceManager.GetString("Repository_FileDeleted", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Ignored.
+ /// </summary>
+ public static String Repository_FileIgnored {
+ get {
+ return ResourceManager.GetString("Repository_FileIgnored", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Modified.
+ /// </summary>
+ public static String Repository_FileModified {
+ get {
+ return ResourceManager.GetString("Repository_FileModified", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Renamed.
+ /// </summary>
+ public static String Repository_FileRenamed {
+ get {
+ return ResourceManager.GetString("Repository_FileRenamed", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to TypeChanged.
+ /// </summary>
+ public static String Repository_FileTypeChanged {
+ get {
+ return ResourceManager.GetString("Repository_FileTypeChanged", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Unmodified.
+ /// </summary>
+ public static String Repository_FileUnmodified {
+ get {
+ return ResourceManager.GetString("Repository_FileUnmodified", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Untracked.
+ /// </summary>
+ public static String Repository_FileUntracked {
+ get {
+ return ResourceManager.GetString("Repository_FileUntracked", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Git Url.
+ /// </summary>
+ public static String Repository_GitUrl {
+ get {
+ return ResourceManager.GetString("Repository_GitUrl", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to The HEAD has not set yet.
+ /// </summary>
+ public static String Repository_HeadNotSet {
+ get {
+ return ResourceManager.GetString("Repository_HeadNotSet", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to History.
+ /// </summary>
+ public static String Repository_History {
+ get {
+ return ResourceManager.GetString("Repository_History", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to History for ·.
+ /// </summary>
+ public static String Repository_HistoryFor {
+ get {
+ return ResourceManager.GetString("Repository_HistoryFor", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Is a private repository.
+ /// </summary>
+ public static String Repository_IsPrivate {
+ get {
+ return ResourceManager.GetString("Repository_IsPrivate", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to List of Repositories.
+ /// </summary>
+ public static String Repository_ListTitle {
+ get {
+ return ResourceManager.GetString("Repository_ListTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Repository name.
+ /// </summary>
+ public static String Repository_Name {
+ get {
+ return ResourceManager.GetString("Repository_Name", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Normal view.
+ /// </summary>
+ public static String Repository_NormalView {
+ get {
+ return ResourceManager.GetString("Repository_NormalView", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to No tags found.
+ /// </summary>
+ public static String Repository_NoTags {
+ get {
+ return ResourceManager.GetString("Repository_NoTags", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Parent(s).
+ /// </summary>
+ public static String Repository_Parents {
+ get {
+ return ResourceManager.GetString("Repository_Parents", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Popular repositories.
+ /// </summary>
+ public static String Repository_PopularRepositories {
+ get {
+ return ResourceManager.GetString("Repository_PopularRepositories", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Raw.
+ /// </summary>
+ public static String Repository_Raw {
+ get {
+ return ResourceManager.GetString("Repository_Raw", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Relationship.
+ /// </summary>
+ public static String Repository_Relationship {
+ get {
+ return ResourceManager.GetString("Repository_Relationship", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Repository size.
+ /// </summary>
+ public static String Repository_RepositorySize {
+ get {
+ return ResourceManager.GetString("Repository_RepositorySize", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Read.
+ /// </summary>
+ public static String Repository_ShortAllowRead {
+ get {
+ return ResourceManager.GetString("Repository_ShortAllowRead", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Write.
+ /// </summary>
+ public static String Repository_ShortAllowWrite {
+ get {
+ return ResourceManager.GetString("Repository_ShortAllowWrite", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Owner.
+ /// </summary>
+ public static String Repository_ShortIsOwner {
+ get {
+ return ResourceManager.GetString("Repository_ShortIsOwner", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to No.
+ /// </summary>
+ public static String Repository_ShortNonAllowRead {
+ get {
+ return ResourceManager.GetString("Repository_ShortNonAllowRead", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to No.
+ /// </summary>
+ public static String Repository_ShortNonAllowWrite {
+ get {
+ return ResourceManager.GetString("Repository_ShortNonAllowWrite", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to No.
+ /// </summary>
+ public static String Repository_ShortNotOwner {
+ get {
+ return ResourceManager.GetString("Repository_ShortNotOwner", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Statistics.
+ /// </summary>
+ public static String Repository_Statistics {
+ get {
+ return ResourceManager.GetString("Repository_Statistics", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Do you conform to delete the tag "{0}"?.
+ /// </summary>
+ public static String Repository_TagDeletionWords {
+ get {
+ return ResourceManager.GetString("Repository_TagDeletionWords", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Tags.
+ /// </summary>
+ public static String Repository_Tags {
+ get {
+ return ResourceManager.GetString("Repository_Tags", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Tags · {0}.
+ /// </summary>
+ public static String Repository_TagsTitle {
+ get {
+ return ResourceManager.GetString("Repository_TagsTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Teams.
+ /// </summary>
+ public static String Repository_Teams {
+ get {
+ return ResourceManager.GetString("Repository_Teams", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Tree.
+ /// </summary>
+ public static String Repository_Tree {
+ get {
+ return ResourceManager.GetString("Repository_Tree", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to {2} at {1} · {0}.
+ /// </summary>
+ public static String Repository_TreeTitle {
+ get {
+ return ResourceManager.GetString("Repository_TreeTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Repository update was unsuccessful. Please correct the errors and try again..
+ /// </summary>
+ public static String Repository_UpdateUnsuccessfull {
+ get {
+ return ResourceManager.GetString("Repository_UpdateUnsuccessfull", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Zip.
+ /// </summary>
+ public static String Repository_Zip {
+ get {
+ return ResourceManager.GetString("Repository_Zip", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Zip with CR (\r).
+ /// </summary>
+ public static String Repository_ZipCR {
+ get {
+ return ResourceManager.GetString("Repository_ZipCR", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Zip with CRLF (\r\n).
+ /// </summary>
+ public static String Repository_ZipCRLF {
+ get {
+ return ResourceManager.GetString("Repository_ZipCRLF", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Zip with LF (\n).
+ /// </summary>
+ public static String Repository_ZipLF {
+ get {
+ return ResourceManager.GetString("Repository_ZipLF", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Allow register user.
+ /// </summary>
+ public static String Setting_AllowRegisterUser {
+ get {
+ return ResourceManager.GetString("Setting_AllowRegisterUser", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Allow repository creation.
+ /// </summary>
+ public static String Setting_AllowRepositoryCreation {
+ get {
+ return ResourceManager.GetString("Setting_AllowRepositoryCreation", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Path of cache directory.
+ /// </summary>
+ public static String Setting_CachePath {
+ get {
+ return ResourceManager.GetString("Setting_CachePath", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Settings.
+ /// </summary>
+ public static String Setting_EditTitle {
+ get {
+ return ResourceManager.GetString("Setting_EditTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Enable SSH.
+ /// </summary>
+ public static String Setting_EnableSsh {
+ get {
+ return ResourceManager.GetString("Setting_EnableSsh", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Force HTTPS connection.
+ /// </summary>
+ public static String Setting_ForceSsl {
+ get {
+ return ResourceManager.GetString("Setting_ForceSsl", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Path of git core.
+ /// </summary>
+ public static String Setting_GitCorePath {
+ get {
+ return ResourceManager.GetString("Setting_GitCorePath", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Is public server.
+ /// </summary>
+ public static String Setting_IsPublicServer {
+ get {
+ return ResourceManager.GetString("Setting_IsPublicServer", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Local skip custom error.
+ /// </summary>
+ public static String Setting_LocalSkipCustomError {
+ get {
+ return ResourceManager.GetString("Setting_LocalSkipCustomError", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Number of commits per page.
+ /// </summary>
+ public static String Setting_NumberOfCommitsPerPage {
+ get {
+ return ResourceManager.GetString("Setting_NumberOfCommitsPerPage", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Number of items per list.
+ /// </summary>
+ public static String Setting_NumberOfItemsPerList {
+ get {
+ return ResourceManager.GetString("Setting_NumberOfItemsPerList", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Number of repository contributors.
+ /// </summary>
+ public static String Setting_NumberOfRepositoryContributors {
+ get {
+ return ResourceManager.GetString("Setting_NumberOfRepositoryContributors", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Re-generate ssh key.
+ /// </summary>
+ public static String Setting_ReGenSsh {
+ get {
+ return ResourceManager.GetString("Setting_ReGenSsh", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Conform to Re-generate ssh key.
+ /// </summary>
+ public static String Setting_ReGenSshTitle {
+ get {
+ return ResourceManager.GetString("Setting_ReGenSshTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Do you conform to Re-generate ssh key?.
+ /// </summary>
+ public static String Setting_ReGenSshWords {
+ get {
+ return ResourceManager.GetString("Setting_ReGenSshWords", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Path of repositories.
+ /// </summary>
+ public static String Setting_RepositoryPath {
+ get {
+ return ResourceManager.GetString("Setting_RepositoryPath", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Conform to restart.
+ /// </summary>
+ public static String Setting_RestartTitle {
+ get {
+ return ResourceManager.GetString("Setting_RestartTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Do you conform to restart this application?.
+ /// </summary>
+ public static String Setting_RestartWords {
+ get {
+ return ResourceManager.GetString("Setting_RestartWords", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to SSH connection port.
+ /// </summary>
+ public static String Setting_SshPort {
+ get {
+ return ResourceManager.GetString("Setting_SshPort", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to HTTPS connection port.
+ /// </summary>
+ public static String Setting_SslPort {
+ get {
+ return ResourceManager.GetString("Setting_SslPort", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Update settings was unsuccessful. Please correct the errors and try again..
+ /// </summary>
+ public static String Setting_UpdateSettingsUnsuccessfull {
+ get {
+ return ResourceManager.GetString("Setting_UpdateSettingsUnsuccessfull", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to About.
+ /// </summary>
+ public static String Shared_About {
+ get {
+ return ResourceManager.GetString("Shared_About", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Add.
+ /// </summary>
+ public static String Shared_Add {
+ get {
+ return ResourceManager.GetString("Shared_Add", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to GitCandy.
+ /// </summary>
+ public static String Shared_AppTitle {
+ get {
+ return ResourceManager.GetString("Shared_AppTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Back.
+ /// </summary>
+ public static String Shared_Back {
+ get {
+ return ResourceManager.GetString("Shared_Back", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Conform.
+ /// </summary>
+ public static String Shared_Conform {
+ get {
+ return ResourceManager.GetString("Shared_Conform", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Create.
+ /// </summary>
+ public static String Shared_Create {
+ get {
+ return ResourceManager.GetString("Shared_Create", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Delete.
+ /// </summary>
+ public static String Shared_Delete {
+ get {
+ return ResourceManager.GetString("Shared_Delete", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Detail.
+ /// </summary>
+ public static String Shared_Detail {
+ get {
+ return ResourceManager.GetString("Shared_Detail", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Edit.
+ /// </summary>
+ public static String Shared_Edit {
+ get {
+ return ResourceManager.GetString("Shared_Edit", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Generate.
+ /// </summary>
+ public static String Shared_Generate {
+ get {
+ return ResourceManager.GetString("Shared_Generate", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Lanuages.
+ /// </summary>
+ public static String Shared_Lanuages {
+ get {
+ return ResourceManager.GetString("Shared_Lanuages", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Login.
+ /// </summary>
+ public static String Shared_Login {
+ get {
+ return ResourceManager.GetString("Shared_Login", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Logout.
+ /// </summary>
+ public static String Shared_Logout {
+ get {
+ return ResourceManager.GetString("Shared_Logout", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to No.
+ /// </summary>
+ public static String Shared_No {
+ get {
+ return ResourceManager.GetString("Shared_No", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Register.
+ /// </summary>
+ public static String Shared_Register {
+ get {
+ return ResourceManager.GetString("Shared_Register", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Remove.
+ /// </summary>
+ public static String Shared_Remove {
+ get {
+ return ResourceManager.GetString("Shared_Remove", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Repositories.
+ /// </summary>
+ public static String Shared_Repositories {
+ get {
+ return ResourceManager.GetString("Shared_Repositories", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Reset.
+ /// </summary>
+ public static String Shared_Reset {
+ get {
+ return ResourceManager.GetString("Shared_Reset", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Restart.
+ /// </summary>
+ public static String Shared_Restart {
+ get {
+ return ResourceManager.GetString("Shared_Restart", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Save.
+ /// </summary>
+ public static String Shared_Save {
+ get {
+ return ResourceManager.GetString("Shared_Save", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Search.
+ /// </summary>
+ public static String Shared_Search {
+ get {
+ return ResourceManager.GetString("Shared_Search", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Settings.
+ /// </summary>
+ public static String Shared_Settings {
+ get {
+ return ResourceManager.GetString("Shared_Settings", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Something wrong.
+ /// </summary>
+ public static String Shared_SomethingWrong {
+ get {
+ return ResourceManager.GetString("Shared_SomethingWrong", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Teams.
+ /// </summary>
+ public static String Shared_Teams {
+ get {
+ return ResourceManager.GetString("Shared_Teams", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to {0} - GitCandy.
+ /// </summary>
+ public static String Shared_TitleFormat {
+ get {
+ return ResourceManager.GetString("Shared_TitleFormat", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Users.
+ /// </summary>
+ public static String Shared_Users {
+ get {
+ return ResourceManager.GetString("Shared_Users", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Yes.
+ /// </summary>
+ public static String Shared_Yes {
+ get {
+ return ResourceManager.GetString("Shared_Yes", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Team with this name already exists..
+ /// </summary>
+ public static String Team_AlreadyExists {
+ get {
+ return ResourceManager.GetString("Team_AlreadyExists", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Choose Users for Team {0}.
+ /// </summary>
+ public static String Team_ChooseUserTitle {
+ get {
+ return ResourceManager.GetString("Team_ChooseUserTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Create Team.
+ /// </summary>
+ public static String Team_CreationTitle {
+ get {
+ return ResourceManager.GetString("Team_CreationTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Team creation was unsuccessful. Please correct the errors and try again..
+ /// </summary>
+ public static String Team_CreationUnsuccessfull {
+ get {
+ return ResourceManager.GetString("Team_CreationUnsuccessfull", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Conform Delete Team {0}.
+ /// </summary>
+ public static String Team_DeleteTitle {
+ get {
+ return ResourceManager.GetString("Team_DeleteTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Do you conform to delete the team "{0}"?.
+ /// </summary>
+ public static String Team_DeletionWords {
+ get {
+ return ResourceManager.GetString("Team_DeletionWords", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Team description.
+ /// </summary>
+ public static String Team_Description {
+ get {
+ return ResourceManager.GetString("Team_Description", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Team {0}.
+ /// </summary>
+ public static String Team_DetailTitle {
+ get {
+ return ResourceManager.GetString("Team_DetailTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Edit Team {0}.
+ /// </summary>
+ public static String Team_EditTitle {
+ get {
+ return ResourceManager.GetString("Team_EditTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to List of Teams.
+ /// </summary>
+ public static String Team_ListTitle {
+ get {
+ return ResourceManager.GetString("Team_ListTitle", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Members.
+ /// </summary>
+ public static String Team_Members {
+ get {
+ return ResourceManager.GetString("Team_Members", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Team name.
+ /// </summary>
+ public static String Team_Name {
+ get {
+ return ResourceManager.GetString("Team_Name", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Repositories.
+ /// </summary>
+ public static String Team_Repositories {
+ get {
+ return ResourceManager.GetString("Team_Repositories", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Admin.
+ /// </summary>
+ public static String Team_ShortAdministrator {
+ get {
+ return ResourceManager.GetString("Team_ShortAdministrator", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to No.
+ /// </summary>
+ public static String Team_ShortNonAdministrator {
+ get {
+ return ResourceManager.GetString("Team_ShortNonAdministrator", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to {0} team(s) found.
+ /// </summary>
+ public static String Team_TeamsFound {
+ get {
+ return ResourceManager.GetString("Team_TeamsFound", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to Team update was unsuccessful. Please correct the errors and try again..
+ /// </summary>
+ public static String Team_UpdateUnsuccessfull {
+ get {
+ return ResourceManager.GetString("Team_UpdateUnsuccessfull", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to "{0}" and "{1}" must have the same value.
+ /// </summary>
+ public static String Validation_Compare {
+ get {
+ return ResourceManager.GetString("Validation_Compare", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to "{0}" is not a valid email address.
+ /// </summary>
+ public static String Validation_Email {
+ get {
+ return ResourceManager.GetString("Validation_Email", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to "{0}" is not a valid "{1}" file path.
+ /// </summary>
+ public static String Validation_Filepath {
+ get {
+ return ResourceManager.GetString("Validation_Filepath", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to "{0}" not a valid.
+ /// </summary>
+ public static String Validation_Name {
+ get {
+ return ResourceManager.GetString("Validation_Name", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to {0} can only be between {1} and {2}.
+ /// </summary>
+ public static String Validation_NumberRange {
+ get {
+ return ResourceManager.GetString("Validation_NumberRange", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to "{0}" is mandatory.
+ /// </summary>
+ public static String Validation_Required {
+ get {
+ return ResourceManager.GetString("Validation_Required", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to "{0}" should be smaller than {1} chars.
+ /// </summary>
+ public static String Validation_StringLength {
+ get {
+ return ResourceManager.GetString("Validation_StringLength", resourceCulture);
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized String similar to "{0}" should be smaller than {1} chars and large then {2} chars.
+ /// </summary>
+ public static String Validation_StringLengthRange {
+ get {
+ return ResourceManager.GetString("Validation_StringLengthRange", resourceCulture);
+ }
+ }
+ }
+}
diff --git a/GitCandy.Web/App_GlobalResources/SR.fr.Designer.cs b/GitCandy.Web/App_GlobalResources/SR.fr.Designer.cs
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/GitCandy.Web/App_GlobalResources/SR.fr.Designer.cs
diff --git a/GitCandy.Web/App_GlobalResources/SR.fr.resx b/GitCandy.Web/App_GlobalResources/SR.fr.resx
new file mode 100644
index 0000000..50ee5b5
--- /dev/null
+++ b/GitCandy.Web/App_GlobalResources/SR.fr.resx
@@ -0,0 +1,673 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <data name="Account_AccountAlreadyExists" xml:space="preserve">
+ <value>Un compte avec ce nom d'utilisateur existe déjà.</value>
+ </data>
+ <data name="Account_CantRemoveSelf" xml:space="preserve">
+ <value>Vous ne pouvez pas supprimer vous même.</value>
+ </data>
+ <data name="Account_ChangePassword" xml:space="preserve">
+ <value>Changer le mot de passe</value>
+ </data>
+ <data name="Account_ChangePasswordTitle" xml:space="preserve">
+ <value>Changer le mot de passe</value>
+ </data>
+ <data name="Account_ConformPassword" xml:space="preserve">
+ <value>Confirmer le mot de passe</value>
+ </data>
+ <data name="Account_CreateTitle" xml:space="preserve">
+ <value>Créer un compte</value>
+ </data>
+ <data name="Account_CreationUnsuccessfull" xml:space="preserve">
+ <value>La création de compte n'a pas abouti. S'il vous plaît corriger les erreurs et d'essayer à nouveau.</value>
+ </data>
+ <data name="Account_DeleteTitle" xml:space="preserve">
+ <value>Confirmez la suppression de l'utilisateur {0}</value>
+ </data>
+ <data name="Account_DeletionWords" xml:space="preserve">
+ <value>Confirmez-vous la suppression du compte "{0}"?</value>
+ </data>
+ <data name="Account_Description" xml:space="preserve">
+ <value>Description</value>
+ </data>
+ <data name="Account_DetailTitle" xml:space="preserve">
+ <value>Utilisateur {0}</value>
+ </data>
+ <data name="Account_EditTitle" xml:space="preserve">
+ <value>Modifier l'utilisateur {0}</value>
+ </data>
+ <data name="Account_Email" xml:space="preserve">
+ <value>Email</value>
+ </data>
+ <data name="Account_EmailAlreadyExists" xml:space="preserve">
+ <value>Un compte avec cet email existe déjà.</value>
+ </data>
+ <data name="Account_ForgotPassword" xml:space="preserve">
+ <value>Nom d'utilisateur ou mot de passe oublié</value>
+ </data>
+ <data name="Account_ForgotTitle" xml:space="preserve">
+ <value>Mot de passe oublié</value>
+ </data>
+ <data name="Account_IsSystemAdministrator" xml:space="preserve">
+ <value>Est administrateur système</value>
+ </data>
+ <data name="Account_ListTitle" xml:space="preserve">
+ <value>Liste des utilisateurs</value>
+ </data>
+ <data name="Account_LoginFailed" xml:space="preserve">
+ <value>Erreur dans le nom d'utilisateur ou mot de passe</value>
+ </data>
+ <data name="Account_LoginTitle" xml:space="preserve">
+ <value>Connexion</value>
+ </data>
+ <data name="Account_NewPassword" xml:space="preserve">
+ <value>Nouveau mot de passe</value>
+ </data>
+ <data name="Account_Nickname" xml:space="preserve">
+ <value>Pseudo</value>
+ </data>
+ <data name="Account_OldPassword" xml:space="preserve">
+ <value>Ancien mot de passe</value>
+ </data>
+ <data name="Account_OldPasswordError" xml:space="preserve">
+ <value>Erreur sur l'ancien mot de passe</value>
+ </data>
+ <data name="Account_Password" xml:space="preserve">
+ <value>Mot de passe</value>
+ </data>
+ <data name="Account_PasswordError" xml:space="preserve">
+ <value>Erreur sur le mot de passe</value>
+ </data>
+ <data name="Account_Repositories" xml:space="preserve">
+ <value>Dépôts</value>
+ </data>
+ <data name="Account_Teams" xml:space="preserve">
+ <value>Équipes</value>
+ </data>
+ <data name="Account_UpdateUnsuccessfull" xml:space="preserve">
+ <value>La mise à jour du compte a échoué. S'il vous plaît corriger les erreurs et d'essayer à nouveau.</value>
+ </data>
+ <data name="Account_Username" xml:space="preserve">
+ <value>Nom d'utilisateur</value>
+ </data>
+ <data name="Account_UsernameOrEmail" xml:space="preserve">
+ <value>Nom d'utilisateur ou e-mail</value>
+ </data>
+ <data name="Account_UsersFound" xml:space="preserve">
+ <value>{0} utilisateur (s) trouvé(s)</value>
+ </data>
+ <data name="Home_AboutDescription" xml:space="preserve">
+ <value>GitCandy© est une plate-forme [Git](http://git-scm.com/documentation) de contrôle de version distribué, basé sur une application ASP.NET MVC, qui prend en charge les dépôts publics et privés. Vous pouvez créer et collaborer votre dépôt avec votre équipe n'importe quand n'importe où sans aucune limite.
+
+Visitez une démo sur [http://gitcandy.com]()
+
+Get source and fork me on [http://github.com/Aimeast/GitCandy]()
+
+---
+#### Thanks for (alphabet)</value>
+ </data>
+ <data name="Home_AboutTitle" xml:space="preserve">
+ <value>À propos</value>
+ </data>
+ <data name="Repository_Ahead" xml:space="preserve">
+ <value>ahead</value>
+ </data>
+ <data name="Repository_AllowAnonymousRead" xml:space="preserve">
+ <value>Droit de lecture pour les anonymes</value>
+ </data>
+ <data name="Repository_AllowAnonymousWrite" xml:space="preserve">
+ <value>Droit d'écriture pour les anonymes</value>
+ </data>
+ <data name="Repository_AlreadyExists" xml:space="preserve">
+ <value>Un dépôt portant ce nom existe déjà.</value>
+ </data>
+ <data name="Repository_AuthoredAt" xml:space="preserve">
+ <value>authored at</value>
+ </data>
+ <data name="Repository_BaseBranch" xml:space="preserve">
+ <value>Branche de base</value>
+ </data>
+ <data name="Repository_Behind" xml:space="preserve">
+ <value>behind</value>
+ </data>
+ <data name="Repository_BinaryFileWrods" xml:space="preserve">
+ <value>Ceci est un fichier binaire qui n'est pas supporté</value>
+ </data>
+ <data name="Repository_Blame" xml:space="preserve">
+ <value>Blame</value>
+ </data>
+ <data name="Repository_BlameTitle" xml:space="preserve">
+ <value>{2} at {1} · {0}</value>
+ </data>
+ <data name="Repository_BlobTitle" xml:space="preserve">
+ <value>{2} at {1} · {0}</value>
+ </data>
+ <data name="Repository_Branches" xml:space="preserve">
+ <value>Branches</value>
+ </data>
+ <data name="Repository_BranchesTitle" xml:space="preserve">
+ <value>Branches · {0}</value>
+ </data>
+ <data name="Repository_ChangedSummary" xml:space="preserve">
+ <value>Résumé: {0} fichiers modifiés avec {1} ajouts et {2} suppressions.</value>
+ </data>
+ <data name="Repository_Collaborations" xml:space="preserve">
+ <value>Collaborations</value>
+ </data>
+ <data name="Repository_CollaborationTitle" xml:space="preserve">
+ <value>Collaborations · {0}</value>
+ </data>
+ <data name="Repository_Collaborators" xml:space="preserve">
+ <value>Collaborators</value>
+ </data>
+ <data name="Repository_Commits" xml:space="preserve">
+ <value>Commits</value>
+ </data>
+ <data name="Repository_CommitsTitle" xml:space="preserve">
+ <value>Historique pour {1} · {0}</value>
+ </data>
+ <data name="Repository_CommittedAt" xml:space="preserve">
+ <value>committed at</value>
+ </data>
+ <data name="Repository_CommitTitle" xml:space="preserve">
+ <value>{2} at {1} · {0}</value>
+ </data>
+ <data name="Repository_Contributors" xml:space="preserve">
+ <value>Contributors</value>
+ </data>
+ <data name="Repository_ContributorsTitle" xml:space="preserve">
+ <value>Contributors · {0}</value>
+ </data>
+ <data name="Repository_Copied" xml:space="preserve">
+ <value>Copié</value>
+ </data>
+ <data name="Repository_CopyToClipboard" xml:space="preserve">
+ <value>Copier dans presse-papiers</value>
+ </data>
+ <data name="Repository_CreateTitle" xml:space="preserve">
+ <value>Créer un dépôt</value>
+ </data>
+ <data name="Repository_CreationUnsuccessfull" xml:space="preserve">
+ <value>La création du dépôt a échoué. S'il vous plaît corriger les erreurs et d'essayer à nouveau.</value>
+ </data>
+ <data name="Repository_CurrentBranch" xml:space="preserve">
+ <value>Branche courante</value>
+ </data>
+ <data name="Repository_CurrentCommits" xml:space="preserve">
+ <value>Commits dans la branche courante</value>
+ </data>
+ <data name="Repository_CurrentContributors" xml:space="preserve">
+ <value>Collaborateurs dans la branche courante</value>
+ </data>
+ <data name="Repository_CurrentFiles" xml:space="preserve">
+ <value>Fichiers dans la branche courante</value>
+ </data>
+ <data name="Repository_CurrentSourceSize" xml:space="preserve">
+ <value>Taille des source dans la branche courante</value>
+ </data>
+ <data name="Repository_DefaultBranch" xml:space="preserve">
+ <value>Branche par défaut</value>
+ </data>
+ <data name="Repository_DefaultCommits" xml:space="preserve">
+ <value>Commits dans la branche par défaut</value>
+ </data>
+ <data name="Repository_DefaultContributors" xml:space="preserve">
+ <value>Collaborateurs dans la branche par défaut</value>
+ </data>
+ <data name="Repository_DefaultFiles" xml:space="preserve">
+ <value>Fichiers dans la branche par défaut</value>
+ </data>
+ <data name="Repository_DefaultSourceSize" xml:space="preserve">
+ <value>Taille des source dans la branche par défaut</value>
+ </data>
+ <data name="Repository_DeleteTitle" xml:space="preserve">
+ <value>Confirmer la suppression du dépôt {0}</value>
+ </data>
+ <data name="Repository_DeletionWords" xml:space="preserve">
+ <value>Confirmez-vous la suppression du dépôt "{0}" ?</value>
+ </data>
+ <data name="Repository_Description" xml:space="preserve">
+ <value>Description</value>
+ </data>
+ <data name="Repository_DetailTitle" xml:space="preserve">
+ <value>Dépôt {0}</value>
+ </data>
+ <data name="Repository_EditTitle" xml:space="preserve">
+ <value>Editer le dépôt {0}</value>
+ </data>
+ <data name="Repository_EmptyWords" xml:space="preserve">
+ <value>Pousser (Push) un dépot dans branche HEAD(master) pour l'affichage ici.</value>
+ </data>
+ <data name="Repository_FileAdded" xml:space="preserve">
+ <value>Ajouté</value>
+ </data>
+ <data name="Repository_FileCopied" xml:space="preserve">
+ <value>Copié</value>
+ </data>
+ <data name="Repository_FileDeleted" xml:space="preserve">
+ <value>Supprimé</value>
+ </data>
+ <data name="Repository_FileIgnored" xml:space="preserve">
+ <value>Ignoré</value>
+ </data>
+ <data name="Repository_FileModified" xml:space="preserve">
+ <value>Modifié</value>
+ </data>
+ <data name="Repository_FileRenamed" xml:space="preserve">
+ <value>Renommé</value>
+ </data>
+ <data name="Repository_FileTypeChanged" xml:space="preserve">
+ <value>Type de changé</value>
+ </data>
+ <data name="Repository_FileUnmodified" xml:space="preserve">
+ <value>Non modifiée</value>
+ </data>
+ <data name="Repository_FileUntracked" xml:space="preserve">
+ <value>Non suivie</value>
+ </data>
+ <data name="Repository_GitUrl" xml:space="preserve">
+ <value>Git Url</value>
+ </data>
+ <data name="Repository_History" xml:space="preserve">
+ <value>Historique</value>
+ </data>
+ <data name="Repository_HistoryFor" xml:space="preserve">
+ <value>Historique pour ·</value>
+ </data>
+ <data name="Repository_IsPrivate" xml:space="preserve">
+ <value>Est un dépôt privé</value>
+ </data>
+ <data name="Repository_ListTitle" xml:space="preserve">
+ <value>Liste des dépôts</value>
+ </data>
+ <data name="Repository_Name" xml:space="preserve">
+ <value>Nom du dépôt</value>
+ </data>
+ <data name="Repository_NormalView" xml:space="preserve">
+ <value>Vue normale</value>
+ </data>
+ <data name="Repository_NoTags" xml:space="preserve">
+ <value>Aucun tag trouvé</value>
+ </data>
+ <data name="Repository_Parents" xml:space="preserve">
+ <value>Parent(s)</value>
+ </data>
+ <data name="Repository_PopularRepositories" xml:space="preserve">
+ <value>Dépôts populaires</value>
+ </data>
+ <data name="Repository_Raw" xml:space="preserve">
+ <value>Raw</value>
+ </data>
+ <data name="Repository_Relationship" xml:space="preserve">
+ <value>Connexions</value>
+ </data>
+ <data name="Repository_RepositorySize" xml:space="preserve">
+ <value>Taille du dépôt</value>
+ </data>
+ <data name="Repository_ShortAllowRead" xml:space="preserve">
+ <value>Lecture</value>
+ </data>
+ <data name="Repository_ShortAllowWrite" xml:space="preserve">
+ <value>Écriture</value>
+ </data>
+ <data name="Repository_ShortIsOwner" xml:space="preserve">
+ <value>Propriétaire</value>
+ </data>
+ <data name="Repository_ShortNonAllowRead" xml:space="preserve">
+ <value>Non</value>
+ </data>
+ <data name="Repository_ShortNonAllowWrite" xml:space="preserve">
+ <value>Non</value>
+ </data>
+ <data name="Repository_ShortNotOwner" xml:space="preserve">
+ <value>Non</value>
+ </data>
+ <data name="Repository_Statistics" xml:space="preserve">
+ <value>Statistiques</value>
+ </data>
+ <data name="Repository_Tags" xml:space="preserve">
+ <value>Tags</value>
+ </data>
+ <data name="Repository_TagsTitle" xml:space="preserve">
+ <value>Tags · {0}</value>
+ </data>
+ <data name="Repository_Teams" xml:space="preserve">
+ <value>Équipes</value>
+ </data>
+ <data name="Repository_Tree" xml:space="preserve">
+ <value>Arbre</value>
+ </data>
+ <data name="Repository_TreeTitle" xml:space="preserve">
+ <value>{2} à {1} · {0}</value>
+ </data>
+ <data name="Repository_UpdateUnsuccessfull" xml:space="preserve">
+ <value>La mise à jour du dépôt a échoué. S'il vous plaît corriger les erreurs et d'essayer à nouveau.</value>
+ </data>
+ <data name="Repository_Zip" xml:space="preserve">
+ <value>Zip</value>
+ </data>
+ <data name="Repository_ZipCR" xml:space="preserve">
+ <value>Zip avec CR (\r)</value>
+ </data>
+ <data name="Repository_ZipCRLF" xml:space="preserve">
+ <value>Zip avec CRLF (\r\n)</value>
+ </data>
+ <data name="Repository_ZipLF" xml:space="preserve">
+ <value>Zip avec LF (\n)</value>
+ </data>
+ <data name="Setting_AllowRegisterUser" xml:space="preserve">
+ <value>Autoriser la création d'utilisateur</value>
+ </data>
+ <data name="Setting_AllowRepositoryCreation" xml:space="preserve">
+ <value>Autoriser la création de dépôt</value>
+ </data>
+ <data name="Setting_CachePath" xml:space="preserve">
+ <value>Chemin du répertoire de cache</value>
+ </data>
+ <data name="Setting_EditTitle" xml:space="preserve">
+ <value>Paramètres</value>
+ </data>
+ <data name="Setting_ForceSsl" xml:space="preserve">
+ <value>Forcer les connexion en HTTPS</value>
+ </data>
+ <data name="Setting_GitExePath" xml:space="preserve">
+ <value>Chemin vers git.exe</value>
+ </data>
+ <data name="Setting_IsPublicServer" xml:space="preserve">
+ <value>Est un server public</value>
+ </data>
+ <data name="Setting_LocalSkipCustomError" xml:space="preserve">
+ <value>Ignorer la page d'erreur personnalisée en local</value>
+ </data>
+ <data name="Setting_NumberOfCommitsPerPage" xml:space="preserve">
+ <value>Nombre de commits par page</value>
+ </data>
+ <data name="Setting_NumberOfItemsPerList" xml:space="preserve">
+ <value>Nombre d'éléments par liste</value>
+ </data>
+ <data name="Setting_RepositoryPath" xml:space="preserve">
+ <value>Chemin du répertoire des dépôts</value>
+ </data>
+ <data name="Setting_RestartTitle" xml:space="preserve">
+ <value>Confirmation pour redémarrer</value>
+ </data>
+ <data name="Setting_RestartWords" xml:space="preserve">
+ <value>Confirmez-vous de redémarrer cette application?</value>
+ </data>
+ <data name="Setting_SslPort" xml:space="preserve">
+ <value>Port pour les connexion HTTPS</value>
+ </data>
+ <data name="Setting_UpdateSettingsUnsuccessfull" xml:space="preserve">
+ <value>La mise à jour des paramètres a échoué. S'il vous plaît corriger les erreurs et d'essayer à nouveau.</value>
+ </data>
+ <data name="Shared_About" xml:space="preserve">
+ <value>À propos</value>
+ </data>
+ <data name="Shared_Add" xml:space="preserve">
+ <value>Ajouter</value>
+ </data>
+ <data name="Shared_AppTitle" xml:space="preserve">
+ <value>GitCandy</value>
+ </data>
+ <data name="Shared_Back" xml:space="preserve">
+ <value>Retour</value>
+ </data>
+ <data name="Shared_Conform" xml:space="preserve">
+ <value>Confirmer</value>
+ </data>
+ <data name="Shared_Create" xml:space="preserve">
+ <value>Créer</value>
+ </data>
+ <data name="Shared_Delete" xml:space="preserve">
+ <value>Supprimer</value>
+ </data>
+ <data name="Shared_Detail" xml:space="preserve">
+ <value>Détail</value>
+ </data>
+ <data name="Shared_Edit" xml:space="preserve">
+ <value>Modifier</value>
+ </data>
+ <data name="Shared_Lanuages" xml:space="preserve">
+ <value>Langues</value>
+ </data>
+ <data name="Shared_Login" xml:space="preserve">
+ <value>Se connecter</value>
+ </data>
+ <data name="Shared_Logout" xml:space="preserve">
+ <value>Se déconnecter</value>
+ </data>
+ <data name="Shared_No" xml:space="preserve">
+ <value>Non</value>
+ </data>
+ <data name="Shared_Register" xml:space="preserve">
+ <value>Créer un compte</value>
+ </data>
+ <data name="Shared_Remove" xml:space="preserve">
+ <value>Supprimer</value>
+ </data>
+ <data name="Shared_Repositories" xml:space="preserve">
+ <value>Dépôts</value>
+ </data>
+ <data name="Shared_Reset" xml:space="preserve">
+ <value>Réinitialiser</value>
+ </data>
+ <data name="Shared_Restart" xml:space="preserve">
+ <value>Redémarrer</value>
+ </data>
+ <data name="Shared_Save" xml:space="preserve">
+ <value>Sauvegarder</value>
+ </data>
+ <data name="Shared_Search" xml:space="preserve">
+ <value>Rechercher</value>
+ </data>
+ <data name="Shared_Settings" xml:space="preserve">
+ <value>Paramètres</value>
+ </data>
+ <data name="Shared_SomethingWrong" xml:space="preserve">
+ <value>Quelque chose s'est mal passé</value>
+ </data>
+ <data name="Shared_Teams" xml:space="preserve">
+ <value>Équipes</value>
+ </data>
+ <data name="Shared_TitleFormat" xml:space="preserve">
+ <value>{0} - GitCandy</value>
+ </data>
+ <data name="Shared_Users" xml:space="preserve">
+ <value>Utilisateurs</value>
+ </data>
+ <data name="Shared_Yes" xml:space="preserve">
+ <value>Oui</value>
+ </data>
+ <data name="Team_AlreadyExists" xml:space="preserve">
+ <value>Une équipe avec ce nom existe déjà.</value>
+ </data>
+ <data name="Team_ChooseUserTitle" xml:space="preserve">
+ <value>Choisissez les utilisateurs pour l'équipe {0}</value>
+ </data>
+ <data name="Team_CreationTitle" xml:space="preserve">
+ <value>Création d'équipe</value>
+ </data>
+ <data name="Team_CreationUnsuccessfull" xml:space="preserve">
+ <value>La création de l'équipe a échoué. S'il vous plaît corriger les erreurs et d'essayer à nouveau.</value>
+ </data>
+ <data name="Team_DeleteTitle" xml:space="preserve">
+ <value>Confirmer la suppression de l'équipe {0}</value>
+ </data>
+ <data name="Team_DeletionWords" xml:space="preserve">
+ <value>Confirmez-vous la suppression de l'équipe "{0}"?</value>
+ </data>
+ <data name="Team_Description" xml:space="preserve">
+ <value>Description de l'équipe</value>
+ </data>
+ <data name="Team_DetailTitle" xml:space="preserve">
+ <value>Équipe {0}</value>
+ </data>
+ <data name="Team_EditTitle" xml:space="preserve">
+ <value>Editer l'équipe {0}</value>
+ </data>
+ <data name="Team_ListTitle" xml:space="preserve">
+ <value>Liste des équipes</value>
+ </data>
+ <data name="Team_Members" xml:space="preserve">
+ <value>Membres</value>
+ </data>
+ <data name="Team_Name" xml:space="preserve">
+ <value>Nom de l'équipe</value>
+ </data>
+ <data name="Team_Repositories" xml:space="preserve">
+ <value>Dépôts</value>
+ </data>
+ <data name="Team_ShortAdministrator" xml:space="preserve">
+ <value>Admin</value>
+ </data>
+ <data name="Team_ShortNonAdministrator" xml:space="preserve">
+ <value>Non</value>
+ </data>
+ <data name="Team_TeamsFound" xml:space="preserve">
+ <value>{0} équipe (s) trouvée(s)</value>
+ </data>
+ <data name="Team_UpdateUnsuccessfull" xml:space="preserve">
+ <value>La mise à jour de l'équipe a échoué. S'il vous plaît corriger les erreurs et d'essayer à nouveau.</value>
+ </data>
+ <data name="Validation_Compare" xml:space="preserve">
+ <value>"{0}" et "{1}" doivent avoir la même valeur</value>
+ </data>
+ <data name="Validation_Email" xml:space="preserve">
+ <value>"{0}" n'est pas une adresse email valide</value>
+ </data>
+ <data name="Validation_Filepath" xml:space="preserve">
+ <value>"{0}" n'est pas un chemin de fichier valide pour "{1}"</value>
+ </data>
+ <data name="Validation_Name" xml:space="preserve">
+ <value>"{0}" n'est pas valide</value>
+ </data>
+ <data name="Validation_NumberRange" xml:space="preserve">
+ <value>{0} doit être compris entre {1} et {2}</value>
+ </data>
+ <data name="Validation_Required" xml:space="preserve">
+ <value>"{0}" est obligatoire</value>
+ </data>
+ <data name="Validation_StringLength" xml:space="preserve">
+ <value>"{0}" doit être inférieur à {1} caractères</value>
+ </data>
+ <data name="Validation_StringLengthRange" xml:space="preserve">
+ <value>"{0}" doit être inférieur à {1} caractères et plus grand que {2} caractères</value>
+ </data>
+</root>
\ No newline at end of file
diff --git a/GitCandy.Web/App_GlobalResources/SR.resx b/GitCandy.Web/App_GlobalResources/SR.resx
new file mode 100644
index 0000000..bfdb23e
--- /dev/null
+++ b/GitCandy.Web/App_GlobalResources/SR.resx
@@ -0,0 +1,718 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <data name="Account_AccountAlreadyExists" xml:space="preserve">
+ <value>Account with this username already exists.</value>
+ </data>
+ <data name="Account_CantRemoveSelf" xml:space="preserve">
+ <value>Can't remove yourself</value>
+ </data>
+ <data name="Account_ChangePassword" xml:space="preserve">
+ <value>Change password</value>
+ </data>
+ <data name="Account_ChangePasswordTitle" xml:space="preserve">
+ <value>Change Password</value>
+ </data>
+ <data name="Account_ConformPassword" xml:space="preserve">
+ <value>Conform Password</value>
+ </data>
+ <data name="Account_CreateTitle" xml:space="preserve">
+ <value>Register</value>
+ </data>
+ <data name="Account_CreationUnsuccessfull" xml:space="preserve">
+ <value>Account creation was unsuccessful. Please correct the errors and try again.</value>
+ </data>
+ <data name="Account_DeleteTitle" xml:space="preserve">
+ <value>Conform Delete User {0}</value>
+ </data>
+ <data name="Account_DeletionWords" xml:space="preserve">
+ <value>Do you conform to delete the account "{0}"?</value>
+ </data>
+ <data name="Account_Description" xml:space="preserve">
+ <value>Description</value>
+ </data>
+ <data name="Account_DetailTitle" xml:space="preserve">
+ <value>User {0}</value>
+ </data>
+ <data name="Account_EditTitle" xml:space="preserve">
+ <value>Edit User {0}</value>
+ </data>
+ <data name="Account_Email" xml:space="preserve">
+ <value>Email</value>
+ </data>
+ <data name="Account_EmailAlreadyExists" xml:space="preserve">
+ <value>Account with this email already exists.</value>
+ </data>
+ <data name="Account_ForgotPassword" xml:space="preserve">
+ <value>Forgot username or password</value>
+ </data>
+ <data name="Account_ForgotTitle" xml:space="preserve">
+ <value>Forgot Password</value>
+ </data>
+ <data name="Account_IsSystemAdministrator" xml:space="preserve">
+ <value>Is system administrator</value>
+ </data>
+ <data name="Account_ListTitle" xml:space="preserve">
+ <value>List of Users</value>
+ </data>
+ <data name="Account_LoginFailed" xml:space="preserve">
+ <value>Username or password error</value>
+ </data>
+ <data name="Account_LoginTitle" xml:space="preserve">
+ <value>Log in</value>
+ </data>
+ <data name="Account_NewPassword" xml:space="preserve">
+ <value>New password</value>
+ </data>
+ <data name="Account_Nickname" xml:space="preserve">
+ <value>Nickname</value>
+ </data>
+ <data name="Account_OldPassword" xml:space="preserve">
+ <value>Old password</value>
+ </data>
+ <data name="Account_OldPasswordError" xml:space="preserve">
+ <value>Old password error</value>
+ </data>
+ <data name="Account_Password" xml:space="preserve">
+ <value>Password</value>
+ </data>
+ <data name="Account_PasswordError" xml:space="preserve">
+ <value>Password error</value>
+ </data>
+ <data name="Account_Repositories" xml:space="preserve">
+ <value>Respositories</value>
+ </data>
+ <data name="Account_SshKeys" xml:space="preserve">
+ <value>SSH Key</value>
+ </data>
+ <data name="Account_Teams" xml:space="preserve">
+ <value>Teams</value>
+ </data>
+ <data name="Account_UpdateUnsuccessfull" xml:space="preserve">
+ <value>Account update was unsuccessful. Please correct the errors and try again.</value>
+ </data>
+ <data name="Account_Username" xml:space="preserve">
+ <value>Username</value>
+ </data>
+ <data name="Account_UsernameOrEmail" xml:space="preserve">
+ <value>Username or email</value>
+ </data>
+ <data name="Account_UsersFound" xml:space="preserve">
+ <value>{0} user(s) found</value>
+ </data>
+ <data name="Account_SSH" xml:space="preserve">
+ <value>SSH</value>
+ </data>
+ <data name="Home_AboutDescription" xml:space="preserve">
+ <value>GitCandy&copy; is a [Git](http://git-scm.com/documentation) distributed version control platform based on ASP.NET MVC application, which supports public and private repositories. You can create and collaborate your repository with your team anytime anywhere without any limit.
+
+Visit a demo on [http://gitcandy.com]()
+
+Get source and fork me on [http://github.com/Aimeast/GitCandy]()
+
+---
+#### Thanks for (alphabet)</value>
+ </data>
+ <data name="Home_AboutTitle" xml:space="preserve">
+ <value>About</value>
+ </data>
+ <data name="Repository_Ahead" xml:space="preserve">
+ <value>ahead</value>
+ </data>
+ <data name="Repository_AllowAnonymousRead" xml:space="preserve">
+ <value>Read for anonymous</value>
+ </data>
+ <data name="Repository_AllowAnonymousWrite" xml:space="preserve">
+ <value>Write for anonymous</value>
+ </data>
+ <data name="Repository_AlreadyExists" xml:space="preserve">
+ <value>Repository with this name already exists.</value>
+ </data>
+ <data name="Repository_AuthoredAt" xml:space="preserve">
+ <value>authored at</value>
+ </data>
+ <data name="Repository_BaseBranch" xml:space="preserve">
+ <value>Base branch</value>
+ </data>
+ <data name="Repository_Behind" xml:space="preserve">
+ <value>behind</value>
+ </data>
+ <data name="Repository_BinaryFileWrods" xml:space="preserve">
+ <value>This is a binary file that preview is not supported</value>
+ </data>
+ <data name="Repository_Blame" xml:space="preserve">
+ <value>Blame</value>
+ </data>
+ <data name="Repository_BlameTitle" xml:space="preserve">
+ <value>{2} at {1} · {0}</value>
+ </data>
+ <data name="Repository_BlobTitle" xml:space="preserve">
+ <value>{2} at {1} · {0}</value>
+ </data>
+ <data name="Repository_BranchDeletionWords" xml:space="preserve">
+ <value>Do you conform to delete the branch "{0}"?</value>
+ </data>
+ <data name="Repository_Branches" xml:space="preserve">
+ <value>Branches</value>
+ </data>
+ <data name="Repository_BranchesTitle" xml:space="preserve">
+ <value>Branches · {0}</value>
+ </data>
+ <data name="Repository_ChangedSummary" xml:space="preserve">
+ <value>Summary: {0} changed files with {1} additions and {2} deletions.</value>
+ </data>
+ <data name="Repository_Collaborations" xml:space="preserve">
+ <value>Collaborations</value>
+ </data>
+ <data name="Repository_CollaborationTitle" xml:space="preserve">
+ <value>Collaborations · {0}</value>
+ </data>
+ <data name="Repository_Collaborators" xml:space="preserve">
+ <value>Collaborators</value>
+ </data>
+ <data name="Repository_Commits" xml:space="preserve">
+ <value>Commits</value>
+ </data>
+ <data name="Repository_CommitsTitle" xml:space="preserve">
+ <value>History for {1} · {0}</value>
+ </data>
+ <data name="Repository_CommittedAt" xml:space="preserve">
+ <value>committed at</value>
+ </data>
+ <data name="Repository_CommitTitle" xml:space="preserve">
+ <value>{2} at {1} · {0}</value>
+ </data>
+ <data name="Repository_Compare" xml:space="preserve">
+ <value>Compare</value>
+ </data>
+ <data name="Repository_CompareNothing" xml:space="preserve">
+ <value>There is nothing to compare</value>
+ </data>
+ <data name="Repository_CompareTitle" xml:space="preserve">
+ <value>Compare · {0}</value>
+ </data>
+ <data name="Repository_Contributors" xml:space="preserve">
+ <value>Contributors</value>
+ </data>
+ <data name="Repository_ContributorsTitle" xml:space="preserve">
+ <value>Contributors · {0}</value>
+ </data>
+ <data name="Repository_Copied" xml:space="preserve">
+ <value>Copied</value>
+ </data>
+ <data name="Repository_CopyToClipboard" xml:space="preserve">
+ <value>Copy to clipboard</value>
+ </data>
+ <data name="Repository_CreateTitle" xml:space="preserve">
+ <value>Create Repository</value>
+ </data>
+ <data name="Repository_CreationUnsuccessfull" xml:space="preserve">
+ <value>Repository creation was unsuccessful. Please correct the errors and try again.</value>
+ </data>
+ <data name="Repository_CurrentBranch" xml:space="preserve">
+ <value>Current branch</value>
+ </data>
+ <data name="Repository_CurrentCommits" xml:space="preserve">
+ <value>Commits in current branch</value>
+ </data>
+ <data name="Repository_CurrentContributors" xml:space="preserve">
+ <value>Contributors in current branch</value>
+ </data>
+ <data name="Repository_CurrentFiles" xml:space="preserve">
+ <value>Files in current branch</value>
+ </data>
+ <data name="Repository_CurrentSourceSize" xml:space="preserve">
+ <value>Source size in current branch</value>
+ </data>
+ <data name="Repository_DefaultBranch" xml:space="preserve">
+ <value>Default branch</value>
+ </data>
+ <data name="Repository_DefaultCommits" xml:space="preserve">
+ <value>Commits in default branch</value>
+ </data>
+ <data name="Repository_DefaultContributors" xml:space="preserve">
+ <value>Contributors in default branch</value>
+ </data>
+ <data name="Repository_DefaultFiles" xml:space="preserve">
+ <value>Files in default branch</value>
+ </data>
+ <data name="Repository_DefaultSourceSize" xml:space="preserve">
+ <value>Source size in default branch</value>
+ </data>
+ <data name="Repository_DeleteTitle" xml:space="preserve">
+ <value>Conform Delete Repository {0}</value>
+ </data>
+ <data name="Repository_DeletionWords" xml:space="preserve">
+ <value>Do you conform to delete the repository "{0}"?</value>
+ </data>
+ <data name="Repository_Description" xml:space="preserve">
+ <value>Description</value>
+ </data>
+ <data name="Repository_DetailTitle" xml:space="preserve">
+ <value>Repository {0}</value>
+ </data>
+ <data name="Repository_EditTitle" xml:space="preserve">
+ <value>Edit Repository {0}</value>
+ </data>
+ <data name="Repository_EmptyWords" xml:space="preserve">
+ <value>Push a repository with HEAD(master) branch for display here.</value>
+ </data>
+ <data name="Repository_FileAdded" xml:space="preserve">
+ <value>Added</value>
+ </data>
+ <data name="Repository_FileCopied" xml:space="preserve">
+ <value>Copied</value>
+ </data>
+ <data name="Repository_FileDeleted" xml:space="preserve">
+ <value>Deleted</value>
+ </data>
+ <data name="Repository_FileIgnored" xml:space="preserve">
+ <value>Ignored</value>
+ </data>
+ <data name="Repository_FileModified" xml:space="preserve">
+ <value>Modified</value>
+ </data>
+ <data name="Repository_FileRenamed" xml:space="preserve">
+ <value>Renamed</value>
+ </data>
+ <data name="Repository_FileTypeChanged" xml:space="preserve">
+ <value>TypeChanged</value>
+ </data>
+ <data name="Repository_FileUnmodified" xml:space="preserve">
+ <value>Unmodified</value>
+ </data>
+ <data name="Repository_FileUntracked" xml:space="preserve">
+ <value>Untracked</value>
+ </data>
+ <data name="Repository_GitUrl" xml:space="preserve">
+ <value>Git Url</value>
+ </data>
+ <data name="Repository_HeadNotSet" xml:space="preserve">
+ <value>The HEAD has not set yet</value>
+ </data>
+ <data name="Repository_History" xml:space="preserve">
+ <value>History</value>
+ </data>
+ <data name="Repository_HistoryFor" xml:space="preserve">
+ <value>History for ·</value>
+ </data>
+ <data name="Repository_IsPrivate" xml:space="preserve">
+ <value>Is a private repository</value>
+ </data>
+ <data name="Repository_ListTitle" xml:space="preserve">
+ <value>List of Repositories</value>
+ </data>
+ <data name="Repository_Name" xml:space="preserve">
+ <value>Repository name</value>
+ </data>
+ <data name="Repository_NormalView" xml:space="preserve">
+ <value>Normal view</value>
+ </data>
+ <data name="Repository_NoTags" xml:space="preserve">
+ <value>No tags found</value>
+ </data>
+ <data name="Repository_Parents" xml:space="preserve">
+ <value>Parent(s)</value>
+ </data>
+ <data name="Repository_PopularRepositories" xml:space="preserve">
+ <value>Popular repositories</value>
+ </data>
+ <data name="Repository_Raw" xml:space="preserve">
+ <value>Raw</value>
+ </data>
+ <data name="Repository_Relationship" xml:space="preserve">
+ <value>Relationship</value>
+ </data>
+ <data name="Repository_RepositorySize" xml:space="preserve">
+ <value>Repository size</value>
+ </data>
+ <data name="Repository_ShortAllowRead" xml:space="preserve">
+ <value>Read</value>
+ </data>
+ <data name="Repository_ShortAllowWrite" xml:space="preserve">
+ <value>Write</value>
+ </data>
+ <data name="Repository_ShortIsOwner" xml:space="preserve">
+ <value>Owner</value>
+ </data>
+ <data name="Repository_ShortNonAllowRead" xml:space="preserve">
+ <value>No</value>
+ </data>
+ <data name="Repository_ShortNonAllowWrite" xml:space="preserve">
+ <value>No</value>
+ </data>
+ <data name="Repository_ShortNotOwner" xml:space="preserve">
+ <value>No</value>
+ </data>
+ <data name="Repository_Statistics" xml:space="preserve">
+ <value>Statistics</value>
+ </data>
+ <data name="Repository_Tags" xml:space="preserve">
+ <value>Tags</value>
+ </data>
+ <data name="Repository_TagsTitle" xml:space="preserve">
+ <value>Tags · {0}</value>
+ </data>
+ <data name="Repository_Teams" xml:space="preserve">
+ <value>Teams</value>
+ </data>
+ <data name="Repository_Tree" xml:space="preserve">
+ <value>Tree</value>
+ </data>
+ <data name="Repository_TreeTitle" xml:space="preserve">
+ <value>{2} at {1} · {0}</value>
+ </data>
+ <data name="Repository_UpdateUnsuccessfull" xml:space="preserve">
+ <value>Repository update was unsuccessful. Please correct the errors and try again.</value>
+ </data>
+ <data name="Repository_Zip" xml:space="preserve">
+ <value>Zip</value>
+ </data>
+ <data name="Repository_ZipCR" xml:space="preserve">
+ <value>Zip with CR (\r)</value>
+ </data>
+ <data name="Repository_ZipCRLF" xml:space="preserve">
+ <value>Zip with CRLF (\r\n)</value>
+ </data>
+ <data name="Repository_ZipLF" xml:space="preserve">
+ <value>Zip with LF (\n)</value>
+ </data>
+ <data name="Setting_AllowRegisterUser" xml:space="preserve">
+ <value>Allow register user</value>
+ </data>
+ <data name="Setting_AllowRepositoryCreation" xml:space="preserve">
+ <value>Allow repository creation</value>
+ </data>
+ <data name="Setting_CachePath" xml:space="preserve">
+ <value>Path of cache directory</value>
+ </data>
+ <data name="Setting_EditTitle" xml:space="preserve">
+ <value>Settings</value>
+ </data>
+ <data name="Setting_EnableSsh" xml:space="preserve">
+ <value>Enable SSH</value>
+ </data>
+ <data name="Setting_ForceSsl" xml:space="preserve">
+ <value>Force HTTPS connection</value>
+ </data>
+ <data name="Setting_GitCorePath" xml:space="preserve">
+ <value>Path of git core</value>
+ </data>
+ <data name="Setting_IsPublicServer" xml:space="preserve">
+ <value>Is public server</value>
+ </data>
+ <data name="Setting_LocalSkipCustomError" xml:space="preserve">
+ <value>Local skip custom error</value>
+ </data>
+ <data name="Setting_NumberOfCommitsPerPage" xml:space="preserve">
+ <value>Number of commits per page</value>
+ </data>
+ <data name="Setting_NumberOfItemsPerList" xml:space="preserve">
+ <value>Number of items per list</value>
+ </data>
+ <data name="Setting_NumberOfRepositoryContributors" xml:space="preserve">
+ <value>Number of repository contributors</value>
+ </data>
+ <data name="Setting_ReGenSsh" xml:space="preserve">
+ <value>Re-generate ssh key</value>
+ </data>
+ <data name="Setting_ReGenSshTitle" xml:space="preserve">
+ <value>Conform to Re-generate ssh key</value>
+ </data>
+ <data name="Setting_ReGenSshWords" xml:space="preserve">
+ <value>Do you conform to Re-generate ssh key?</value>
+ </data>
+ <data name="Setting_RepositoryPath" xml:space="preserve">
+ <value>Path of repositories</value>
+ </data>
+ <data name="Setting_RestartTitle" xml:space="preserve">
+ <value>Conform to restart</value>
+ </data>
+ <data name="Setting_RestartWords" xml:space="preserve">
+ <value>Do you conform to restart this application?</value>
+ </data>
+ <data name="Setting_SshPort" xml:space="preserve">
+ <value>SSH connection port</value>
+ </data>
+ <data name="Setting_SslPort" xml:space="preserve">
+ <value>HTTPS connection port</value>
+ </data>
+ <data name="Setting_UpdateSettingsUnsuccessfull" xml:space="preserve">
+ <value>Update settings was unsuccessful. Please correct the errors and try again.</value>
+ </data>
+ <data name="Shared_About" xml:space="preserve">
+ <value>About</value>
+ </data>
+ <data name="Shared_Add" xml:space="preserve">
+ <value>Add</value>
+ </data>
+ <data name="Shared_AppTitle" xml:space="preserve">
+ <value>GitCandy</value>
+ </data>
+ <data name="Shared_Back" xml:space="preserve">
+ <value>Back</value>
+ </data>
+ <data name="Shared_Conform" xml:space="preserve">
+ <value>Conform</value>
+ </data>
+ <data name="Shared_Create" xml:space="preserve">
+ <value>Create</value>
+ </data>
+ <data name="Shared_Delete" xml:space="preserve">
+ <value>Delete</value>
+ </data>
+ <data name="Shared_Detail" xml:space="preserve">
+ <value>Detail</value>
+ </data>
+ <data name="Shared_Edit" xml:space="preserve">
+ <value>Edit</value>
+ </data>
+ <data name="Shared_Generate" xml:space="preserve">
+ <value>Generate</value>
+ </data>
+ <data name="Shared_Lanuages" xml:space="preserve">
+ <value>Lanuages</value>
+ </data>
+ <data name="Shared_Login" xml:space="preserve">
+ <value>Login</value>
+ </data>
+ <data name="Shared_Logout" xml:space="preserve">
+ <value>Logout</value>
+ </data>
+ <data name="Shared_No" xml:space="preserve">
+ <value>No</value>
+ </data>
+ <data name="Shared_Register" xml:space="preserve">
+ <value>Register</value>
+ </data>
+ <data name="Shared_Remove" xml:space="preserve">
+ <value>Remove</value>
+ </data>
+ <data name="Shared_Repositories" xml:space="preserve">
+ <value>Repositories</value>
+ </data>
+ <data name="Shared_Reset" xml:space="preserve">
+ <value>Reset</value>
+ </data>
+ <data name="Shared_Restart" xml:space="preserve">
+ <value>Restart</value>
+ </data>
+ <data name="Shared_Save" xml:space="preserve">
+ <value>Save</value>
+ </data>
+ <data name="Shared_Search" xml:space="preserve">
+ <value>Search</value>
+ </data>
+ <data name="Shared_Settings" xml:space="preserve">
+ <value>Settings</value>
+ </data>
+ <data name="Shared_SomethingWrong" xml:space="preserve">
+ <value>Something wrong</value>
+ </data>
+ <data name="Shared_Teams" xml:space="preserve">
+ <value>Teams</value>
+ </data>
+ <data name="Shared_TitleFormat" xml:space="preserve">
+ <value>{0} - GitCandy</value>
+ </data>
+ <data name="Shared_Users" xml:space="preserve">
+ <value>Users</value>
+ </data>
+ <data name="Shared_Yes" xml:space="preserve">
+ <value>Yes</value>
+ </data>
+ <data name="Team_AlreadyExists" xml:space="preserve">
+ <value>Team with this name already exists.</value>
+ </data>
+ <data name="Team_ChooseUserTitle" xml:space="preserve">
+ <value>Choose Users for Team {0}</value>
+ </data>
+ <data name="Team_CreationTitle" xml:space="preserve">
+ <value>Create Team</value>
+ </data>
+ <data name="Team_CreationUnsuccessfull" xml:space="preserve">
+ <value>Team creation was unsuccessful. Please correct the errors and try again.</value>
+ </data>
+ <data name="Team_DeleteTitle" xml:space="preserve">
+ <value>Conform Delete Team {0}</value>
+ </data>
+ <data name="Team_DeletionWords" xml:space="preserve">
+ <value>Do you conform to delete the team "{0}"?</value>
+ </data>
+ <data name="Team_Description" xml:space="preserve">
+ <value>Team description</value>
+ </data>
+ <data name="Team_DetailTitle" xml:space="preserve">
+ <value>Team {0}</value>
+ </data>
+ <data name="Team_EditTitle" xml:space="preserve">
+ <value>Edit Team {0}</value>
+ </data>
+ <data name="Team_ListTitle" xml:space="preserve">
+ <value>List of Teams</value>
+ </data>
+ <data name="Team_Members" xml:space="preserve">
+ <value>Members</value>
+ </data>
+ <data name="Team_Name" xml:space="preserve">
+ <value>Team name</value>
+ </data>
+ <data name="Team_Repositories" xml:space="preserve">
+ <value>Repositories</value>
+ </data>
+ <data name="Team_ShortAdministrator" xml:space="preserve">
+ <value>Admin</value>
+ </data>
+ <data name="Team_ShortNonAdministrator" xml:space="preserve">
+ <value>No</value>
+ </data>
+ <data name="Team_TeamsFound" xml:space="preserve">
+ <value>{0} team(s) found</value>
+ </data>
+ <data name="Team_UpdateUnsuccessfull" xml:space="preserve">
+ <value>Team update was unsuccessful. Please correct the errors and try again.</value>
+ </data>
+ <data name="Validation_Compare" xml:space="preserve">
+ <value>"{0}" and "{1}" must have the same value</value>
+ </data>
+ <data name="Validation_Email" xml:space="preserve">
+ <value>"{0}" is not a valid email address</value>
+ </data>
+ <data name="Validation_Filepath" xml:space="preserve">
+ <value>"{0}" is not a valid "{1}" file path</value>
+ </data>
+ <data name="Validation_Name" xml:space="preserve">
+ <value>"{0}" not a valid</value>
+ </data>
+ <data name="Validation_NumberRange" xml:space="preserve">
+ <value>{0} can only be between {1} and {2}</value>
+ </data>
+ <data name="Validation_Required" xml:space="preserve">
+ <value>"{0}" is mandatory</value>
+ </data>
+ <data name="Validation_StringLength" xml:space="preserve">
+ <value>"{0}" should be smaller than {1} chars</value>
+ </data>
+ <data name="Validation_StringLengthRange" xml:space="preserve">
+ <value>"{0}" should be smaller than {1} chars and large then {2} chars</value>
+ </data>
+ <data name="Repository_TagDeletionWords" xml:space="preserve">
+ <value>Do you conform to delete the tag "{0}"?</value>
+ </data>
+</root>
\ No newline at end of file
diff --git a/GitCandy.Web/App_GlobalResources/SR.zh-Hans.Designer.cs b/GitCandy.Web/App_GlobalResources/SR.zh-Hans.Designer.cs
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/GitCandy.Web/App_GlobalResources/SR.zh-Hans.Designer.cs
diff --git a/GitCandy.Web/App_GlobalResources/SR.zh-Hans.resx b/GitCandy.Web/App_GlobalResources/SR.zh-Hans.resx
new file mode 100644
index 0000000..95bb31a
--- /dev/null
+++ b/GitCandy.Web/App_GlobalResources/SR.zh-Hans.resx
@@ -0,0 +1,718 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <data name="Account_AccountAlreadyExists" xml:space="preserve">
+ <value>用户名已存在。</value>
+ </data>
+ <data name="Account_CantRemoveSelf" xml:space="preserve">
+ <value>不能删除自己</value>
+ </data>
+ <data name="Account_ChangePassword" xml:space="preserve">
+ <value>修改密码</value>
+ </data>
+ <data name="Account_ChangePasswordTitle" xml:space="preserve">
+ <value>修改密码</value>
+ </data>
+ <data name="Account_ConformPassword" xml:space="preserve">
+ <value>确认密码</value>
+ </data>
+ <data name="Account_CreateTitle" xml:space="preserve">
+ <value>注册</value>
+ </data>
+ <data name="Account_CreationUnsuccessfull" xml:space="preserve">
+ <value>创建用户失败,请纠正后再次尝试。</value>
+ </data>
+ <data name="Account_DeleteTitle" xml:space="preserve">
+ <value>确认删除用户 {0}</value>
+ </data>
+ <data name="Account_DeletionWords" xml:space="preserve">
+ <value>你确认要删除用户 "{0}" 吗?</value>
+ </data>
+ <data name="Account_Description" xml:space="preserve">
+ <value>描述</value>
+ </data>
+ <data name="Account_DetailTitle" xml:space="preserve">
+ <value>用户 {0}</value>
+ </data>
+ <data name="Account_EditTitle" xml:space="preserve">
+ <value>编辑用户 {0}</value>
+ </data>
+ <data name="Account_Email" xml:space="preserve">
+ <value>电子邮件</value>
+ </data>
+ <data name="Account_EmailAlreadyExists" xml:space="preserve">
+ <value>电子邮件地址已存在</value>
+ </data>
+ <data name="Account_ForgotPassword" xml:space="preserve">
+ <value>忘记用户名或密码了</value>
+ </data>
+ <data name="Account_ForgotTitle" xml:space="preserve">
+ <value>忘记密码</value>
+ </data>
+ <data name="Account_IsSystemAdministrator" xml:space="preserve">
+ <value>管理员</value>
+ </data>
+ <data name="Account_ListTitle" xml:space="preserve">
+ <value>用户列表</value>
+ </data>
+ <data name="Account_LoginFailed" xml:space="preserve">
+ <value>用户名或密码错误</value>
+ </data>
+ <data name="Account_LoginTitle" xml:space="preserve">
+ <value>登录</value>
+ </data>
+ <data name="Account_NewPassword" xml:space="preserve">
+ <value>新密码</value>
+ </data>
+ <data name="Account_Nickname" xml:space="preserve">
+ <value>昵称</value>
+ </data>
+ <data name="Account_OldPassword" xml:space="preserve">
+ <value>旧密码</value>
+ </data>
+ <data name="Account_OldPasswordError" xml:space="preserve">
+ <value>旧密码错误</value>
+ </data>
+ <data name="Account_Password" xml:space="preserve">
+ <value>密码</value>
+ </data>
+ <data name="Account_PasswordError" xml:space="preserve">
+ <value>密码错误</value>
+ </data>
+ <data name="Account_Repositories" xml:space="preserve">
+ <value>代码库</value>
+ </data>
+ <data name="Account_SshKeys" xml:space="preserve">
+ <value>SSH密钥</value>
+ </data>
+ <data name="Account_Teams" xml:space="preserve">
+ <value>团队</value>
+ </data>
+ <data name="Account_UpdateUnsuccessfull" xml:space="preserve">
+ <value>更新用户失败,请纠正后再次尝试。</value>
+ </data>
+ <data name="Account_Username" xml:space="preserve">
+ <value>用户名</value>
+ </data>
+ <data name="Account_UsernameOrEmail" xml:space="preserve">
+ <value>用户名或电子邮件</value>
+ </data>
+ <data name="Account_UsersFound" xml:space="preserve">
+ <value>发现 {0} 个用户</value>
+ </data>
+ <data name="Account_SSH" xml:space="preserve">
+ <value>SSH</value>
+ </data>
+ <data name="Home_AboutDescription" xml:space="preserve">
+ <value>GitCandy&copy; 是一个基于ASP.NET MVC的[Git](http://git-scm.com/documentation)分布式版本控制平台,支持公共和私有代码库。可以不受限制的创建代码库,与你的团队一块协作。
+
+演示地址:[http://gitcandy.com]()
+
+获取源码并衍生:[http://github.com/Aimeast/GitCandy]()
+
+---
+#### 鸣谢 (字母序)</value>
+ </data>
+ <data name="Home_AboutTitle" xml:space="preserve">
+ <value>关于</value>
+ </data>
+ <data name="Repository_Ahead" xml:space="preserve">
+ <value>领先</value>
+ </data>
+ <data name="Repository_AllowAnonymousRead" xml:space="preserve">
+ <value>匿名读取</value>
+ </data>
+ <data name="Repository_AllowAnonymousWrite" xml:space="preserve">
+ <value>匿名写入</value>
+ </data>
+ <data name="Repository_AlreadyExists" xml:space="preserve">
+ <value>代码库已存在。</value>
+ </data>
+ <data name="Repository_AuthoredAt" xml:space="preserve">
+ <value>编写于</value>
+ </data>
+ <data name="Repository_BaseBranch" xml:space="preserve">
+ <value>基于此分支</value>
+ </data>
+ <data name="Repository_Behind" xml:space="preserve">
+ <value>落后</value>
+ </data>
+ <data name="Repository_BinaryFileWrods" xml:space="preserve">
+ <value>不支持预览二进制文件</value>
+ </data>
+ <data name="Repository_Blame" xml:space="preserve">
+ <value>审阅</value>
+ </data>
+ <data name="Repository_BlameTitle" xml:space="preserve">
+ <value>{2} 在 {1} · {0}</value>
+ </data>
+ <data name="Repository_BlobTitle" xml:space="preserve">
+ <value>{2} 在 {1} · {0}</value>
+ </data>
+ <data name="Repository_BranchDeletionWords" xml:space="preserve">
+ <value>你确认要删除分支 "{0}" 吗?</value>
+ </data>
+ <data name="Repository_Branches" xml:space="preserve">
+ <value>分支</value>
+ </data>
+ <data name="Repository_BranchesTitle" xml:space="preserve">
+ <value>分支 · {0}</value>
+ </data>
+ <data name="Repository_ChangedSummary" xml:space="preserve">
+ <value>共计: 修改{0}个文件,增加{1}行、删除{2}行。</value>
+ </data>
+ <data name="Repository_Collaborations" xml:space="preserve">
+ <value>你参与的代码库</value>
+ </data>
+ <data name="Repository_CollaborationTitle" xml:space="preserve">
+ <value>参与 · {0}</value>
+ </data>
+ <data name="Repository_Collaborators" xml:space="preserve">
+ <value>参与者</value>
+ </data>
+ <data name="Repository_Commits" xml:space="preserve">
+ <value>提交</value>
+ </data>
+ <data name="Repository_CommitsTitle" xml:space="preserve">
+ <value>提交记录 {1} · {0}</value>
+ </data>
+ <data name="Repository_CommittedAt" xml:space="preserve">
+ <value>提交于</value>
+ </data>
+ <data name="Repository_CommitTitle" xml:space="preserve">
+ <value>{2} 在 {1} · {0}</value>
+ </data>
+ <data name="Repository_Compare" xml:space="preserve">
+ <value>比较</value>
+ </data>
+ <data name="Repository_CompareNothing" xml:space="preserve">
+ <value>没有什么可比较</value>
+ </data>
+ <data name="Repository_CompareTitle" xml:space="preserve">
+ <value>比较 · {0}</value>
+ </data>
+ <data name="Repository_Contributors" xml:space="preserve">
+ <value>参与</value>
+ </data>
+ <data name="Repository_ContributorsTitle" xml:space="preserve">
+ <value>参与者 · {0}</value>
+ </data>
+ <data name="Repository_Copied" xml:space="preserve">
+ <value>已复制</value>
+ </data>
+ <data name="Repository_CopyToClipboard" xml:space="preserve">
+ <value>复制到剪切板</value>
+ </data>
+ <data name="Repository_CreateTitle" xml:space="preserve">
+ <value>创建代码库</value>
+ </data>
+ <data name="Repository_CreationUnsuccessfull" xml:space="preserve">
+ <value>创建代码库失败,请纠正后再次尝试。</value>
+ </data>
+ <data name="Repository_CurrentBranch" xml:space="preserve">
+ <value>当前分支</value>
+ </data>
+ <data name="Repository_CurrentCommits" xml:space="preserve">
+ <value>当前分支的提交总数</value>
+ </data>
+ <data name="Repository_CurrentContributors" xml:space="preserve">
+ <value>当前分支的参与者</value>
+ </data>
+ <data name="Repository_CurrentFiles" xml:space="preserve">
+ <value>当前分支的文件数</value>
+ </data>
+ <data name="Repository_CurrentSourceSize" xml:space="preserve">
+ <value>当前分支的源代码大小</value>
+ </data>
+ <data name="Repository_DefaultBranch" xml:space="preserve">
+ <value>默认分支</value>
+ </data>
+ <data name="Repository_DefaultCommits" xml:space="preserve">
+ <value>默认分支的提交总数</value>
+ </data>
+ <data name="Repository_DefaultContributors" xml:space="preserve">
+ <value>默认分支的参与者</value>
+ </data>
+ <data name="Repository_DefaultFiles" xml:space="preserve">
+ <value>默认分支的文件总数</value>
+ </data>
+ <data name="Repository_DefaultSourceSize" xml:space="preserve">
+ <value>默认分支的源代码大小</value>
+ </data>
+ <data name="Repository_DeleteTitle" xml:space="preserve">
+ <value>确认删除代码库 {0}</value>
+ </data>
+ <data name="Repository_DeletionWords" xml:space="preserve">
+ <value>你确认要删除代码库 "{0}" 吗?</value>
+ </data>
+ <data name="Repository_Description" xml:space="preserve">
+ <value>描述</value>
+ </data>
+ <data name="Repository_DetailTitle" xml:space="preserve">
+ <value>代码库 {0}</value>
+ </data>
+ <data name="Repository_EditTitle" xml:space="preserve">
+ <value>编辑代码库 {0}</value>
+ </data>
+ <data name="Repository_EmptyWords" xml:space="preserve">
+ <value>推送一个代码库到 HEAD(master) 分支才能在此显示。</value>
+ </data>
+ <data name="Repository_FileAdded" xml:space="preserve">
+ <value>增加</value>
+ </data>
+ <data name="Repository_FileCopied" xml:space="preserve">
+ <value>复制</value>
+ </data>
+ <data name="Repository_FileDeleted" xml:space="preserve">
+ <value>删除</value>
+ </data>
+ <data name="Repository_FileIgnored" xml:space="preserve">
+ <value>忽略</value>
+ </data>
+ <data name="Repository_FileModified" xml:space="preserve">
+ <value>修改</value>
+ </data>
+ <data name="Repository_FileRenamed" xml:space="preserve">
+ <value>重命名</value>
+ </data>
+ <data name="Repository_FileTypeChanged" xml:space="preserve">
+ <value>改变类型</value>
+ </data>
+ <data name="Repository_FileUnmodified" xml:space="preserve">
+ <value>未修改</value>
+ </data>
+ <data name="Repository_FileUntracked" xml:space="preserve">
+ <value>未跟踪</value>
+ </data>
+ <data name="Repository_GitUrl" xml:space="preserve">
+ <value>Git 地址</value>
+ </data>
+ <data name="Repository_HeadNotSet" xml:space="preserve">
+ <value>HEAD 还未设置</value>
+ </data>
+ <data name="Repository_History" xml:space="preserve">
+ <value>提交记录</value>
+ </data>
+ <data name="Repository_HistoryFor" xml:space="preserve">
+ <value>提交记录 ·</value>
+ </data>
+ <data name="Repository_IsPrivate" xml:space="preserve">
+ <value>私有代码库</value>
+ </data>
+ <data name="Repository_ListTitle" xml:space="preserve">
+ <value>代码库列表</value>
+ </data>
+ <data name="Repository_Name" xml:space="preserve">
+ <value>代码库名</value>
+ </data>
+ <data name="Repository_NormalView" xml:space="preserve">
+ <value>标准视图</value>
+ </data>
+ <data name="Repository_NoTags" xml:space="preserve">
+ <value>没有找到标签</value>
+ </data>
+ <data name="Repository_Parents" xml:space="preserve">
+ <value>父辈</value>
+ </data>
+ <data name="Repository_PopularRepositories" xml:space="preserve">
+ <value>大家的代码库</value>
+ </data>
+ <data name="Repository_Raw" xml:space="preserve">
+ <value>原文件</value>
+ </data>
+ <data name="Repository_Relationship" xml:space="preserve">
+ <value>关联</value>
+ </data>
+ <data name="Repository_RepositorySize" xml:space="preserve">
+ <value>代码库大小</value>
+ </data>
+ <data name="Repository_ShortAllowRead" xml:space="preserve">
+ <value>读</value>
+ </data>
+ <data name="Repository_ShortAllowWrite" xml:space="preserve">
+ <value>写</value>
+ </data>
+ <data name="Repository_ShortIsOwner" xml:space="preserve">
+ <value>我的</value>
+ </data>
+ <data name="Repository_ShortNonAllowRead" xml:space="preserve">
+ <value>否</value>
+ </data>
+ <data name="Repository_ShortNonAllowWrite" xml:space="preserve">
+ <value>否</value>
+ </data>
+ <data name="Repository_ShortNotOwner" xml:space="preserve">
+ <value>否</value>
+ </data>
+ <data name="Repository_Statistics" xml:space="preserve">
+ <value>统计</value>
+ </data>
+ <data name="Repository_Tags" xml:space="preserve">
+ <value>标签</value>
+ </data>
+ <data name="Repository_TagsTitle" xml:space="preserve">
+ <value>标签 · {0}</value>
+ </data>
+ <data name="Repository_Teams" xml:space="preserve">
+ <value>团队</value>
+ </data>
+ <data name="Repository_Tree" xml:space="preserve">
+ <value>浏览</value>
+ </data>
+ <data name="Repository_TreeTitle" xml:space="preserve">
+ <value>{2} 在 {1} · {0}</value>
+ </data>
+ <data name="Repository_UpdateUnsuccessfull" xml:space="preserve">
+ <value>更新代码库失败,请纠正后再次尝试。</value>
+ </data>
+ <data name="Repository_Zip" xml:space="preserve">
+ <value>打包下载</value>
+ </data>
+ <data name="Repository_ZipCR" xml:space="preserve">
+ <value>以 CR (\r) 下载</value>
+ </data>
+ <data name="Repository_ZipCRLF" xml:space="preserve">
+ <value>以 CRLF (\r\n) 下载</value>
+ </data>
+ <data name="Repository_ZipLF" xml:space="preserve">
+ <value>以 LF (\n) 下载</value>
+ </data>
+ <data name="Setting_AllowRegisterUser" xml:space="preserve">
+ <value>允许用户注册</value>
+ </data>
+ <data name="Setting_AllowRepositoryCreation" xml:space="preserve">
+ <value>允许创建代码库</value>
+ </data>
+ <data name="Setting_CachePath" xml:space="preserve">
+ <value>缓存文件夹路径</value>
+ </data>
+ <data name="Setting_EditTitle" xml:space="preserve">
+ <value>设置</value>
+ </data>
+ <data name="Setting_EnableSsh" xml:space="preserve">
+ <value>开启SSH</value>
+ </data>
+ <data name="Setting_ForceSsl" xml:space="preserve">
+ <value>强制使用HTTPS链接</value>
+ </data>
+ <data name="Setting_GitCorePath" xml:space="preserve">
+ <value>git-core文件夹路径</value>
+ </data>
+ <data name="Setting_IsPublicServer" xml:space="preserve">
+ <value>是否为开放服务</value>
+ </data>
+ <data name="Setting_LocalSkipCustomError" xml:space="preserve">
+ <value>跳过本地错误</value>
+ </data>
+ <data name="Setting_NumberOfCommitsPerPage" xml:space="preserve">
+ <value>每一页显示提交记录数</value>
+ </data>
+ <data name="Setting_NumberOfItemsPerList" xml:space="preserve">
+ <value>每一页显示条目数</value>
+ </data>
+ <data name="Setting_NumberOfRepositoryContributors" xml:space="preserve">
+ <value>显示参与者的条目数</value>
+ </data>
+ <data name="Setting_ReGenSsh" xml:space="preserve">
+ <value>重新生成SSH密钥</value>
+ </data>
+ <data name="Setting_ReGenSshTitle" xml:space="preserve">
+ <value>确认重新生成SSH密钥</value>
+ </data>
+ <data name="Setting_ReGenSshWords" xml:space="preserve">
+ <value>你确定要重新生成SSH密钥吗?</value>
+ </data>
+ <data name="Setting_RepositoryPath" xml:space="preserve">
+ <value>代码库存储路径</value>
+ </data>
+ <data name="Setting_RestartTitle" xml:space="preserve">
+ <value>确认重启</value>
+ </data>
+ <data name="Setting_RestartWords" xml:space="preserve">
+ <value>你确认要重新本程序吗?</value>
+ </data>
+ <data name="Setting_SshPort" xml:space="preserve">
+ <value>SSH端口</value>
+ </data>
+ <data name="Setting_SslPort" xml:space="preserve">
+ <value>HTTPS 链接端口号</value>
+ </data>
+ <data name="Setting_UpdateSettingsUnsuccessfull" xml:space="preserve">
+ <value>更新设置失败,请纠正后再次尝试。</value>
+ </data>
+ <data name="Shared_About" xml:space="preserve">
+ <value>关于</value>
+ </data>
+ <data name="Shared_Add" xml:space="preserve">
+ <value>添加</value>
+ </data>
+ <data name="Shared_AppTitle" xml:space="preserve">
+ <value>GitCandy</value>
+ </data>
+ <data name="Shared_Back" xml:space="preserve">
+ <value>返回</value>
+ </data>
+ <data name="Shared_Conform" xml:space="preserve">
+ <value>确认</value>
+ </data>
+ <data name="Shared_Create" xml:space="preserve">
+ <value>创建</value>
+ </data>
+ <data name="Shared_Delete" xml:space="preserve">
+ <value>删除</value>
+ </data>
+ <data name="Shared_Detail" xml:space="preserve">
+ <value>详情</value>
+ </data>
+ <data name="Shared_Edit" xml:space="preserve">
+ <value>编辑</value>
+ </data>
+ <data name="Shared_Generate" xml:space="preserve">
+ <value>生成</value>
+ </data>
+ <data name="Shared_Lanuages" xml:space="preserve">
+ <value>语言</value>
+ </data>
+ <data name="Shared_Login" xml:space="preserve">
+ <value>登录</value>
+ </data>
+ <data name="Shared_Logout" xml:space="preserve">
+ <value>退出</value>
+ </data>
+ <data name="Shared_No" xml:space="preserve">
+ <value>否</value>
+ </data>
+ <data name="Shared_Register" xml:space="preserve">
+ <value>注册</value>
+ </data>
+ <data name="Shared_Remove" xml:space="preserve">
+ <value>移除</value>
+ </data>
+ <data name="Shared_Repositories" xml:space="preserve">
+ <value>代码库</value>
+ </data>
+ <data name="Shared_Reset" xml:space="preserve">
+ <value>重置</value>
+ </data>
+ <data name="Shared_Restart" xml:space="preserve">
+ <value>重启</value>
+ </data>
+ <data name="Shared_Save" xml:space="preserve">
+ <value>保存</value>
+ </data>
+ <data name="Shared_Search" xml:space="preserve">
+ <value>搜索</value>
+ </data>
+ <data name="Shared_Settings" xml:space="preserve">
+ <value>设置</value>
+ </data>
+ <data name="Shared_SomethingWrong" xml:space="preserve">
+ <value>哪儿错了呀</value>
+ </data>
+ <data name="Shared_Teams" xml:space="preserve">
+ <value>团队</value>
+ </data>
+ <data name="Shared_TitleFormat" xml:space="preserve">
+ <value>{0} - GitCandy</value>
+ </data>
+ <data name="Shared_Users" xml:space="preserve">
+ <value>用户</value>
+ </data>
+ <data name="Shared_Yes" xml:space="preserve">
+ <value>是</value>
+ </data>
+ <data name="Team_AlreadyExists" xml:space="preserve">
+ <value>这个团队名字已经存在</value>
+ </data>
+ <data name="Team_ChooseUserTitle" xml:space="preserve">
+ <value>选择团队 {0} 的成员</value>
+ </data>
+ <data name="Team_CreationTitle" xml:space="preserve">
+ <value>创建团队</value>
+ </data>
+ <data name="Team_CreationUnsuccessfull" xml:space="preserve">
+ <value>创建团队失败,请纠正后再次尝试。</value>
+ </data>
+ <data name="Team_DeleteTitle" xml:space="preserve">
+ <value>确认删除团队 {0}</value>
+ </data>
+ <data name="Team_DeletionWords" xml:space="preserve">
+ <value>你确认要删除团队 "{0}" 吗?</value>
+ </data>
+ <data name="Team_Description" xml:space="preserve">
+ <value>描述</value>
+ </data>
+ <data name="Team_DetailTitle" xml:space="preserve">
+ <value>团队 {0}</value>
+ </data>
+ <data name="Team_EditTitle" xml:space="preserve">
+ <value>编辑团队 {0}</value>
+ </data>
+ <data name="Team_ListTitle" xml:space="preserve">
+ <value>团队列表</value>
+ </data>
+ <data name="Team_Members" xml:space="preserve">
+ <value>成员</value>
+ </data>
+ <data name="Team_Name" xml:space="preserve">
+ <value>团队名</value>
+ </data>
+ <data name="Team_Repositories" xml:space="preserve">
+ <value>代码库</value>
+ </data>
+ <data name="Team_ShortAdministrator" xml:space="preserve">
+ <value>管理员</value>
+ </data>
+ <data name="Team_ShortNonAdministrator" xml:space="preserve">
+ <value>否</value>
+ </data>
+ <data name="Team_TeamsFound" xml:space="preserve">
+ <value>发现 {0} 个团队</value>
+ </data>
+ <data name="Team_UpdateUnsuccessfull" xml:space="preserve">
+ <value>更新团队失败,请纠正后再次尝试。</value>
+ </data>
+ <data name="Validation_Compare" xml:space="preserve">
+ <value>"{0}" 和 "{1}" 必须一致</value>
+ </data>
+ <data name="Validation_Email" xml:space="preserve">
+ <value>"{0}" 不是有效的电子邮件地址</value>
+ </data>
+ <data name="Validation_Filepath" xml:space="preserve">
+ <value>"{0}" 不是有效的 "{1}" 文件路径</value>
+ </data>
+ <data name="Validation_Name" xml:space="preserve">
+ <value>"{0}" 不规范</value>
+ </data>
+ <data name="Validation_NumberRange" xml:space="preserve">
+ <value>{0} 必须介于 {1} 和 {2} 之间</value>
+ </data>
+ <data name="Validation_Required" xml:space="preserve">
+ <value>"{0}" 必须填写</value>
+ </data>
+ <data name="Validation_StringLength" xml:space="preserve">
+ <value>"{0}" 不能超过 {1} 个字符</value>
+ </data>
+ <data name="Validation_StringLengthRange" xml:space="preserve">
+ <value>"{0}" 必须介于 {1} 和 {2} 个字符之间</value>
+ </data>
+ <data name="Repository_TagDeletionWords" xml:space="preserve">
+ <value>你确认要删除标签 "{0}" 吗?</value>
+ </data>
+</root>
\ No newline at end of file
diff --git a/GitCandy.Web/App_Start/AppInfomation.cs b/GitCandy.Web/App_Start/AppInfomation.cs
new file mode 100644
index 0000000..93aceb5
--- /dev/null
+++ b/GitCandy.Web/App_Start/AppInfomation.cs
@@ -0,0 +1,83 @@
+using System;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Web;
+
+namespace GitCandy
+{
+ public static class AppInfomation
+ {
+ public static readonly Version Version = typeof(AppInfomation).Assembly.GetName().Version;
+ public static readonly String AssemblyConfiguration;
+ public static readonly String BuildingInformation;
+ public static readonly DateTimeOffset StartingTime = DateTimeOffset.Now;
+
+ static AppInfomation()
+ {
+ try
+ {
+ BuildingInformation = "";
+
+ var assembly = typeof(AppInfomation).Assembly;
+ var name = assembly.GetManifestResourceNames().Single(s => s.EndsWith(".Information"));
+ using (var stream = assembly.GetManifestResourceStream(name))
+ using (var reader = new StreamReader(stream))
+ {
+ BuildingInformation = reader.ReadToEnd().Trim();
+ }
+ }
+ catch
+ {
+ }
+
+ var assemblyConfigurationAttr = typeof(AppInfomation).Assembly
+ .GetCustomAttributes(typeof(AssemblyConfigurationAttribute), true)
+ .FirstOrDefault() as AssemblyConfigurationAttribute;
+ AssemblyConfiguration = assemblyConfigurationAttr == null
+ ? null
+ : assemblyConfigurationAttr.Configuration;
+ }
+
+ public static String DateTimeOffsetFormatedNow
+ {
+ get
+ {
+ return DateTimeOffset.Now.ToString(DateTimeFormatInfo.InvariantInfo);
+ }
+ }
+
+ //public static String GetAppStartingInfo()
+ //{
+ // var sb = new StringBuilder();
+
+ // sb.AppendLine("GitCandy Starting....");
+ // sb.AppendLine("OS Version: " + Environment.OSVersion);
+ // sb.AppendLine("CLR Version: " + Environment.Version);
+ // sb.AppendLine("64Bit OS: " + Environment.Is64BitOperatingSystem);
+ // sb.AppendLine("64Bit Process: " + Environment.Is64BitProcess);
+ // sb.AppendLine("IIS Version: " + HttpRuntime.IISVersion);
+ // sb.AppendLine("Target Version: " + HttpRuntime.TargetFramework);
+ // sb.AppendLine("App Path: " + HttpRuntime.AppDomainAppPath);
+ // sb.AppendLine("Integrated: " + HttpRuntime.UsingIntegratedPipeline);
+ // sb.AppendLine("On UNC Share: " + HttpRuntime.IsOnUNCShare);
+ // sb.AppendLine("GitCandy Version: " + Version);
+ // sb.AppendLine("Assembly Configuration: " + AssemblyConfiguration);
+ // sb.AppendLine(BuildingInformation);
+
+ // return sb.ToString();
+ //}
+
+ //public static String GetAppStartedInfo()
+ //{
+ // return "GitCandy Started.";
+ //}
+
+ //public static String GetAppEndInfo()
+ //{
+ // return "GitCandy End.";
+ //}
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/App_Start/FilterConfig.cs b/GitCandy.Web/App_Start/FilterConfig.cs
new file mode 100644
index 0000000..2ecb0de
--- /dev/null
+++ b/GitCandy.Web/App_Start/FilterConfig.cs
@@ -0,0 +1,14 @@
+using GitCandy.Filters;
+using System.Web.Mvc;
+
+namespace GitCandy
+{
+ public static class FilterConfig
+ {
+ public static void RegisterGlobalFilters(GlobalFilterCollection filters)
+ {
+ filters.Add(new PublicServerAttribute());
+ //filters.Add(new CustomErrorAttribute());
+ }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/App_Start/RouteConfig.cs b/GitCandy.Web/App_Start/RouteConfig.cs
new file mode 100644
index 0000000..94e89a7
--- /dev/null
+++ b/GitCandy.Web/App_Start/RouteConfig.cs
@@ -0,0 +1,168 @@
+using System;
+using System.Web;
+using System.Web.Mvc;
+using System.Web.Routing;
+using GitCandy.Controllers;
+using NewLife.Collections;
+using NewLife.GitCandy.Entity;
+
+namespace GitCandy
+{
+ public static class RouteConfig
+ {
+ public static void RegisterRoutes(RouteCollection routes)
+ {
+ routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
+
+ #region GitController
+ routes.MapRoute(
+ name: "UserGitWeb",
+ url: "{user}/{name}/{*path}",
+ defaults: new { controller = "Repository", action = "Tree" },
+ constraints: new { user = new UserUrlConstraint() },
+ namespaces: new[] { typeof(AccountController).Namespace }
+ );
+ routes.MapRoute(
+ name: "UserGit",
+ url: "{user}/{project}/{*verb}",
+ defaults: new { controller = "Git", action = "Smart" },
+ constraints: new { user = new UserUrlConstraint() },
+ namespaces: new[] { typeof(AccountController).Namespace }
+ );
+ #endregion
+
+ #region AccountContorller
+ // 实现用户名直达用户首页
+ routes.MapRoute(
+ name: "UserIndex",
+ url: "{name}",
+ defaults: new { controller = "Account", action = "Detail" },
+ constraints: new { name = new UserUrlConstraint() },
+ namespaces: new[] { typeof(AccountController).Namespace }
+ );
+ routes.MapRoute(
+ name: "User",
+ url: "User/{action}/{name}",
+ defaults: new { controller = "Account" },
+ namespaces: new[] { typeof(AccountController).Namespace }
+ );
+ #endregion
+
+ #region TeamContorller
+ // 实现团队名直达团队首页
+ routes.MapRoute(
+ name: "TeamIndex",
+ url: "{name}",
+ defaults: new { controller = "Team", action = "Detail" },
+ constraints: new { name = new TeamUrlConstraint() },
+ namespaces: new[] { typeof(AccountController).Namespace }
+ );
+ routes.MapRoute(
+ name: "Team",
+ url: "Team/{action}/{name}",
+ defaults: new { controller = "Team" },
+ namespaces: new[] { typeof(AccountController).Namespace }
+ );
+ #endregion
+
+ #region RepositoryController
+ routes.MapRoute(
+ name: "Repository",
+ url: "Repository/{action}/{name}/{*path}",
+ defaults: new { controller = "Repository", path = "" },
+ namespaces: new[] { typeof(AccountController).Namespace }
+ );
+ #endregion
+
+ #region SettingController
+ routes.MapRoute(
+ name: "Setting",
+ url: "Setting/{action}",
+ defaults: new { controller = "Setting", action = "Edit" },
+ namespaces: new[] { typeof(AccountController).Namespace }
+ );
+ #endregion
+
+ routes.MapRoute(
+ name: "Home",
+ url: "Home/{action}/{id}",
+ defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
+ namespaces: new[] { typeof(Controllers.HomeController).Namespace }
+ );
+ routes.MapRoute(
+ name: "HomeIndex",
+ url: "",
+ defaults: new { controller = "Repository", action = "Index" },
+ namespaces: new[] { typeof(Controllers.HomeController).Namespace }
+ );
+ routes.MapRoute(
+ name: "Default",
+ url: "{controller}/{action}/{id}",
+ defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
+ namespaces: new[] { typeof(Controllers.HomeController).Namespace }
+ );
+ }
+ }
+
+ class UserUrlConstraint : IRouteConstraint
+ {
+ public bool Match(HttpContextBase httpContext, Route route, String parameterName, RouteValueDictionary values, RouteDirection routeDirection)
+ {
+ var name = values[parameterName] + "";
+ if (name.IsNullOrEmpty()) return false;
+
+ return Match(name);
+ }
+
+ private static DictionaryCache<String, Boolean> _cache;
+ private static Boolean Match(String name)
+ {
+ if (_cache == null)
+ {
+ _cache = new DictionaryCache<String, Boolean>(StringComparer.OrdinalIgnoreCase);
+ _cache.Asynchronous = true;
+ _cache.CacheDefault = true;
+ _cache.Expire = 10 * 60; // 10分钟过期
+ //_cache.ClearPeriod = 10 * 60; // 10分钟清理一次过期项
+ }
+
+ return _cache.GetItem(name, k =>
+ {
+ var user = User.FindByName(k);
+ if (user == null) return false;
+ return !user.IsTeam;
+ });
+ }
+ }
+
+ class TeamUrlConstraint : IRouteConstraint
+ {
+ public bool Match(HttpContextBase httpContext, Route route, String parameterName, RouteValueDictionary values, RouteDirection routeDirection)
+ {
+ var name = values[parameterName] + "";
+ if (name.IsNullOrEmpty()) return false;
+
+ return Match(name);
+ }
+
+ private static DictionaryCache<String, Boolean> _cache;
+ private static Boolean Match(String name)
+ {
+ if (_cache == null)
+ {
+ _cache = new DictionaryCache<String, Boolean>(StringComparer.OrdinalIgnoreCase);
+ _cache.Asynchronous = true;
+ _cache.CacheDefault = true;
+ _cache.Expire = 10 * 60; // 10分钟过期
+ //_cache.ClearPeriod = 10 * 60; // 10分钟清理一次过期项
+ }
+
+ return _cache.GetItem(name, k =>
+ {
+ var user = User.FindByName(k);
+ if (user == null) return false;
+ return user.IsTeam;
+ });
+ }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/App_Start/SshServerConfig.cs b/GitCandy.Web/App_Start/SshServerConfig.cs
new file mode 100644
index 0000000..157273b
--- /dev/null
+++ b/GitCandy.Web/App_Start/SshServerConfig.cs
@@ -0,0 +1,64 @@
+using System;
+using System.Net;
+using System.Threading.Tasks;
+using GitCandy.Configuration;
+using GitCandy.Git;
+using GitCandy.Ssh;
+using NewLife.Log;
+
+namespace GitCandy
+{
+ public static class SshServerConfig
+ {
+ private static SshServer _server = null;
+
+ public static void StartSshServer()
+ {
+ if (!UserConfiguration.Current.EnableSsh || _server != null)
+ return;
+
+ _server = new SshServer(new StartingInfo(IPAddress.IPv6Any, UserConfiguration.Current.SshPort));
+ _server.ConnectionAccepted += (s, e) => new GitSshService(e);
+ _server.ExceptionRasied += (s, e) =>
+ {
+ if (!(e is SshConnectionException))
+ XTrace.Log.Error(e.ToString());
+ };
+ foreach (var key in UserConfiguration.Current.HostKeys)
+ {
+ _server.AddHostKey(key.KeyType, key.KeyXml);
+ }
+ for (var i = 1; i <= 10; i++)
+ {
+ try
+ {
+ _server.Start();
+ XTrace.WriteLine("SSH server started.");
+ break;
+ }
+ catch (Exception ex)
+ {
+ XTrace.WriteLine("Attempt to start SSH server failed in {0} times. {1}", i, ex);
+ Task.Delay(1000).Wait();
+ }
+ }
+ }
+
+ public static void StopSshServer()
+ {
+ if (_server == null)
+ return;
+
+ _server.Stop();
+ _server = null;
+
+ XTrace.WriteLine("SSH server stoped.");
+ }
+
+ public static void RestartSshServer()
+ {
+ StopSshServer();
+ StartSshServer();
+ }
+ }
+}
diff --git a/GitCandy.Web/Areas/GitCandy/Controllers/AuthorizationLogController.cs b/GitCandy.Web/Areas/GitCandy/Controllers/AuthorizationLogController.cs
new file mode 100644
index 0000000..840c3e1
--- /dev/null
+++ b/GitCandy.Web/Areas/GitCandy/Controllers/AuthorizationLogController.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using NewLife.Cube;
+using NewLife.GitCandy.Entity;
+
+namespace GitCandy.Web.Controllers
+{
+ public class AuthorizationLogController : EntityController<AuthorizationLog>
+ {
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Areas/GitCandy/Controllers/GitController.cs b/GitCandy.Web/Areas/GitCandy/Controllers/GitController.cs
new file mode 100644
index 0000000..374f646
--- /dev/null
+++ b/GitCandy.Web/Areas/GitCandy/Controllers/GitController.cs
@@ -0,0 +1,9 @@
+using System.ComponentModel;
+using GitCandy.Configuration;
+using NewLife.Cube;
+
+namespace GitCandy.Web.Controllers
+{
+ [DisplayName("糖果配置")]
+ public class GitController : ConfigController<UserConfiguration> { }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Areas/GitCandy/Controllers/RepositoryController.cs b/GitCandy.Web/Areas/GitCandy/Controllers/RepositoryController.cs
new file mode 100644
index 0000000..e727bb9
--- /dev/null
+++ b/GitCandy.Web/Areas/GitCandy/Controllers/RepositoryController.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using NewLife.Cube;
+using NewLife.GitCandy.Entity;
+
+namespace GitCandy.Web.Controllers
+{
+ public class RepositoryController : EntityController<Repository>
+ {
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Areas/GitCandy/Controllers/SshKeyController.cs b/GitCandy.Web/Areas/GitCandy/Controllers/SshKeyController.cs
new file mode 100644
index 0000000..1a35550
--- /dev/null
+++ b/GitCandy.Web/Areas/GitCandy/Controllers/SshKeyController.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using NewLife.Cube;
+using NewLife.GitCandy.Entity;
+
+namespace GitCandy.Web.Controllers
+{
+ public class SshKeyController : EntityController<SshKey>
+ {
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Areas/GitCandy/Controllers/UserController.cs b/GitCandy.Web/Areas/GitCandy/Controllers/UserController.cs
new file mode 100644
index 0000000..28b0a5a
--- /dev/null
+++ b/GitCandy.Web/Areas/GitCandy/Controllers/UserController.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using NewLife.Cube;
+using NewLife.GitCandy.Entity;
+
+namespace GitCandy.Web.Controllers
+{
+ public class UserController : EntityController<User>
+ {
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Areas/GitCandy/Controllers/UserRepositoryController.cs b/GitCandy.Web/Areas/GitCandy/Controllers/UserRepositoryController.cs
new file mode 100644
index 0000000..875c63e
--- /dev/null
+++ b/GitCandy.Web/Areas/GitCandy/Controllers/UserRepositoryController.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using NewLife.Cube;
+using NewLife.GitCandy.Entity;
+
+namespace GitCandy.Web.Controllers
+{
+ public class UserRepositoryController : EntityController<UserRepository>
+ {
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Areas/GitCandy/Controllers/UserTeamController.cs b/GitCandy.Web/Areas/GitCandy/Controllers/UserTeamController.cs
new file mode 100644
index 0000000..bcadf96
--- /dev/null
+++ b/GitCandy.Web/Areas/GitCandy/Controllers/UserTeamController.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+using NewLife.Cube;
+using NewLife.GitCandy.Entity;
+
+namespace GitCandy.Web.Controllers
+{
+ public class UserTeamController : EntityController<UserTeam>
+ {
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Areas/GitCandy/GitCandyAreaRegistration.cs b/GitCandy.Web/Areas/GitCandy/GitCandyAreaRegistration.cs
new file mode 100644
index 0000000..e9d6ae4
--- /dev/null
+++ b/GitCandy.Web/Areas/GitCandy/GitCandyAreaRegistration.cs
@@ -0,0 +1,28 @@
+using System.ComponentModel;
+using System.Threading.Tasks;
+using System.Web.Mvc;
+using NewLife.Common;
+using NewLife.Cube;
+
+namespace GitCandy.Web
+{
+ [DisplayName("糖果仓库")]
+ public class GitCandyAreaRegistration : AreaRegistrationBase
+ {
+ public override void RegisterArea(AreaRegistrationContext context)
+ {
+ base.RegisterArea(context);
+
+ Task.Run(() =>
+ {
+ var cfg = SysConfig.Current;
+ if (cfg.Name == "NewLife.Cube")
+ {
+ cfg.Name = "NewLife.GitCandy";
+ cfg.DisplayName = "新生命 糖果仓库";
+ cfg.Save();
+ }
+ });
+ }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Areas/GitCandy/Views/web.config b/GitCandy.Web/Areas/GitCandy/Views/web.config
new file mode 100644
index 0000000..d622fed
--- /dev/null
+++ b/GitCandy.Web/Areas/GitCandy/Views/web.config
@@ -0,0 +1,36 @@
+<?xml version="1.0"?>
+
+<configuration>
+ <configSections>
+ <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
+ <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
+ <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
+ </sectionGroup>
+ </configSections>
+
+ <system.web.webPages.razor>
+ <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
+ <pages pageBaseType="System.Web.Mvc.WebViewPage">
+ <namespaces>
+ <add namespace="System.Web.Mvc" />
+ <add namespace="System.Web.Mvc.Ajax" />
+ <add namespace="System.Web.Mvc.Html" />
+ <add namespace="System.Web.Routing" />
+ <add namespace="System.Web.Optimization" />
+ <add namespace="GitCandy" />
+
+ </namespaces>
+ </pages>
+ </system.web.webPages.razor>
+
+ <appSettings>
+ <add key="webpages:Enabled" value="false" />
+ </appSettings>
+
+ <system.webServer>
+ <handlers>
+ <remove name="BlockViewHandler"/>
+ <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
+ </handlers>
+ </system.webServer>
+</configuration>
\ No newline at end of file
diff --git a/GitCandy.Web/Base/RawResult.cs b/GitCandy.Web/Base/RawResult.cs
new file mode 100644
index 0000000..d7e628f
--- /dev/null
+++ b/GitCandy.Web/Base/RawResult.cs
@@ -0,0 +1,35 @@
+using System;
+using System.Net.Mime;
+using System.Web.Mvc;
+
+namespace GitCandy.Base
+{
+ public class RawResult : ActionResult
+ {
+ public RawResult(byte[] contents, String contentType = "text/plain", String fileDownloadName = null)
+ {
+ if (contents == null)
+ throw new ArgumentNullException("contents");
+
+ Contents = contents;
+ ContentType = contentType;
+ FileDownloadName = fileDownloadName;
+ }
+
+ public byte[] Contents { get; private set; }
+ public String ContentType { get; private set; }
+ public String FileDownloadName { get; private set; }
+
+ public override void ExecuteResult(ControllerContext context)
+ {
+ if (context == null)
+ throw new ArgumentNullException("context");
+
+ var response = context.HttpContext.Response;
+ if (!String.IsNullOrEmpty(FileDownloadName))
+ response.AddHeader("Content-Disposition", new ContentDisposition { FileName = FileDownloadName }.ToString());
+ response.ContentType = ContentType;
+ response.BinaryWrite(Contents);
+ }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Content/bootstrap-switch.css b/GitCandy.Web/Content/bootstrap-switch.css
new file mode 100644
index 0000000..69f0986
--- /dev/null
+++ b/GitCandy.Web/Content/bootstrap-switch.css
@@ -0,0 +1,196 @@
+/* ========================================================================
+ * bootstrap-switch - v3.3.2
+ * http://www.bootstrap-switch.org
+ * ========================================================================
+ * Copyright 2012-2013 Mattia Larentis
+ *
+ * ========================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================================
+ */
+
+.bootstrap-switch {
+ display: inline-block;
+ direction: ltr;
+ cursor: pointer;
+ border-radius: 4px;
+ border: 1px solid;
+ border-color: #cccccc;
+ position: relative;
+ text-align: left;
+ overflow: hidden;
+ line-height: 8px;
+ z-index: 0;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ vertical-align: middle;
+ -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+ transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+}
+.bootstrap-switch .bootstrap-switch-container {
+ display: inline-block;
+ top: 0;
+ border-radius: 4px;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+}
+.bootstrap-switch .bootstrap-switch-handle-on,
+.bootstrap-switch .bootstrap-switch-handle-off,
+.bootstrap-switch .bootstrap-switch-label {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ cursor: pointer;
+ display: inline-block !important;
+ height: 100%;
+ padding: 6px 12px;
+ font-size: 14px;
+ line-height: 20px;
+}
+.bootstrap-switch .bootstrap-switch-handle-on,
+.bootstrap-switch .bootstrap-switch-handle-off {
+ text-align: center;
+ z-index: 1;
+}
+.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary,
+.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary {
+ color: #fff;
+ background: #428bca;
+}
+.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-info,
+.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-info {
+ color: #fff;
+ background: #5bc0de;
+}
+.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-success,
+.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-success {
+ color: #fff;
+ background: #5cb85c;
+}
+.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-warning,
+.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-warning {
+ background: #f0ad4e;
+ color: #fff;
+}
+.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-danger,
+.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-danger {
+ color: #fff;
+ background: #d9534f;
+}
+.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default,
+.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default {
+ color: #000;
+ background: #eeeeee;
+}
+.bootstrap-switch .bootstrap-switch-label {
+ text-align: center;
+ margin-top: -1px;
+ margin-bottom: -1px;
+ z-index: 100;
+ color: #333333;
+ background: #ffffff;
+}
+.bootstrap-switch .bootstrap-switch-handle-on {
+ border-bottom-left-radius: 3px;
+ border-top-left-radius: 3px;
+}
+.bootstrap-switch .bootstrap-switch-handle-off {
+ border-bottom-right-radius: 3px;
+ border-top-right-radius: 3px;
+}
+.bootstrap-switch input[type='radio'],
+.bootstrap-switch input[type='checkbox'] {
+ position: absolute !important;
+ top: 0;
+ left: 0;
+ opacity: 0;
+ filter: alpha(opacity=0);
+ z-index: -1;
+}
+.bootstrap-switch input[type='radio'].form-control,
+.bootstrap-switch input[type='checkbox'].form-control {
+ height: auto;
+}
+.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-on,
+.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-off,
+.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-label {
+ padding: 1px 5px;
+ font-size: 12px;
+ line-height: 1.5;
+}
+.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-on,
+.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-off,
+.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-label {
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+}
+.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-on,
+.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-off,
+.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-label {
+ padding: 6px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+}
+.bootstrap-switch.bootstrap-switch-disabled,
+.bootstrap-switch.bootstrap-switch-readonly,
+.bootstrap-switch.bootstrap-switch-indeterminate {
+ cursor: default !important;
+}
+.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-on,
+.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-on,
+.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-on,
+.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-off,
+.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-off,
+.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-off,
+.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-label,
+.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-label,
+.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-label {
+ opacity: 0.5;
+ filter: alpha(opacity=50);
+ cursor: default !important;
+}
+.bootstrap-switch.bootstrap-switch-animate .bootstrap-switch-container {
+ -webkit-transition: margin-left 0.5s;
+ transition: margin-left 0.5s;
+}
+.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-on {
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0;
+ border-bottom-right-radius: 3px;
+ border-top-right-radius: 3px;
+}
+.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-off {
+ border-bottom-right-radius: 0;
+ border-top-right-radius: 0;
+ border-bottom-left-radius: 3px;
+ border-top-left-radius: 3px;
+}
+.bootstrap-switch.bootstrap-switch-focused {
+ border-color: #66afe9;
+ outline: 0;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
+ box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
+}
+.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-label,
+.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-off .bootstrap-switch-label {
+ border-bottom-right-radius: 3px;
+ border-top-right-radius: 3px;
+}
+.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-label,
+.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-on .bootstrap-switch-label {
+ border-bottom-left-radius: 3px;
+ border-top-left-radius: 3px;
+}
diff --git a/GitCandy.Web/Content/bootstrap-theme.css b/GitCandy.Web/Content/bootstrap-theme.css
new file mode 100644
index 0000000..31d8882
--- /dev/null
+++ b/GitCandy.Web/Content/bootstrap-theme.css
@@ -0,0 +1,587 @@
+/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+.btn-default,
+.btn-primary,
+.btn-success,
+.btn-info,
+.btn-warning,
+.btn-danger {
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
+}
+.btn-default:active,
+.btn-primary:active,
+.btn-success:active,
+.btn-info:active,
+.btn-warning:active,
+.btn-danger:active,
+.btn-default.active,
+.btn-primary.active,
+.btn-success.active,
+.btn-info.active,
+.btn-warning.active,
+.btn-danger.active {
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+}
+.btn-default.disabled,
+.btn-primary.disabled,
+.btn-success.disabled,
+.btn-info.disabled,
+.btn-warning.disabled,
+.btn-danger.disabled,
+.btn-default[disabled],
+.btn-primary[disabled],
+.btn-success[disabled],
+.btn-info[disabled],
+.btn-warning[disabled],
+.btn-danger[disabled],
+fieldset[disabled] .btn-default,
+fieldset[disabled] .btn-primary,
+fieldset[disabled] .btn-success,
+fieldset[disabled] .btn-info,
+fieldset[disabled] .btn-warning,
+fieldset[disabled] .btn-danger {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+.btn-default .badge,
+.btn-primary .badge,
+.btn-success .badge,
+.btn-info .badge,
+.btn-warning .badge,
+.btn-danger .badge {
+ text-shadow: none;
+}
+.btn:active,
+.btn.active {
+ background-image: none;
+}
+.btn-default {
+ text-shadow: 0 1px 0 #fff;
+ background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
+ background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
+ background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+ background-repeat: repeat-x;
+ border-color: #dbdbdb;
+ border-color: #ccc;
+}
+.btn-default:hover,
+.btn-default:focus {
+ background-color: #e0e0e0;
+ background-position: 0 -15px;
+}
+.btn-default:active,
+.btn-default.active {
+ background-color: #e0e0e0;
+ border-color: #dbdbdb;
+}
+.btn-default.disabled,
+.btn-default[disabled],
+fieldset[disabled] .btn-default,
+.btn-default.disabled:hover,
+.btn-default[disabled]:hover,
+fieldset[disabled] .btn-default:hover,
+.btn-default.disabled:focus,
+.btn-default[disabled]:focus,
+fieldset[disabled] .btn-default:focus,
+.btn-default.disabled.focus,
+.btn-default[disabled].focus,
+fieldset[disabled] .btn-default.focus,
+.btn-default.disabled:active,
+.btn-default[disabled]:active,
+fieldset[disabled] .btn-default:active,
+.btn-default.disabled.active,
+.btn-default[disabled].active,
+fieldset[disabled] .btn-default.active {
+ background-color: #e0e0e0;
+ background-image: none;
+}
+.btn-primary {
+ background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
+ background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
+ background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+ background-repeat: repeat-x;
+ border-color: #245580;
+}
+.btn-primary:hover,
+.btn-primary:focus {
+ background-color: #265a88;
+ background-position: 0 -15px;
+}
+.btn-primary:active,
+.btn-primary.active {
+ background-color: #265a88;
+ border-color: #245580;
+}
+.btn-primary.disabled,
+.btn-primary[disabled],
+fieldset[disabled] .btn-primary,
+.btn-primary.disabled:hover,
+.btn-primary[disabled]:hover,
+fieldset[disabled] .btn-primary:hover,
+.btn-primary.disabled:focus,
+.btn-primary[disabled]:focus,
+fieldset[disabled] .btn-primary:focus,
+.btn-primary.disabled.focus,
+.btn-primary[disabled].focus,
+fieldset[disabled] .btn-primary.focus,
+.btn-primary.disabled:active,
+.btn-primary[disabled]:active,
+fieldset[disabled] .btn-primary:active,
+.btn-primary.disabled.active,
+.btn-primary[disabled].active,
+fieldset[disabled] .btn-primary.active {
+ background-color: #265a88;
+ background-image: none;
+}
+.btn-success {
+ background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
+ background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
+ background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+ background-repeat: repeat-x;
+ border-color: #3e8f3e;
+}
+.btn-success:hover,
+.btn-success:focus {
+ background-color: #419641;
+ background-position: 0 -15px;
+}
+.btn-success:active,
+.btn-success.active {
+ background-color: #419641;
+ border-color: #3e8f3e;
+}
+.btn-success.disabled,
+.btn-success[disabled],
+fieldset[disabled] .btn-success,
+.btn-success.disabled:hover,
+.btn-success[disabled]:hover,
+fieldset[disabled] .btn-success:hover,
+.btn-success.disabled:focus,
+.btn-success[disabled]:focus,
+fieldset[disabled] .btn-success:focus,
+.btn-success.disabled.focus,
+.btn-success[disabled].focus,
+fieldset[disabled] .btn-success.focus,
+.btn-success.disabled:active,
+.btn-success[disabled]:active,
+fieldset[disabled] .btn-success:active,
+.btn-success.disabled.active,
+.btn-success[disabled].active,
+fieldset[disabled] .btn-success.active {
+ background-color: #419641;
+ background-image: none;
+}
+.btn-info {
+ background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
+ background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
+ background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+ background-repeat: repeat-x;
+ border-color: #28a4c9;
+}
+.btn-info:hover,
+.btn-info:focus {
+ background-color: #2aabd2;
+ background-position: 0 -15px;
+}
+.btn-info:active,
+.btn-info.active {
+ background-color: #2aabd2;
+ border-color: #28a4c9;
+}
+.btn-info.disabled,
+.btn-info[disabled],
+fieldset[disabled] .btn-info,
+.btn-info.disabled:hover,
+.btn-info[disabled]:hover,
+fieldset[disabled] .btn-info:hover,
+.btn-info.disabled:focus,
+.btn-info[disabled]:focus,
+fieldset[disabled] .btn-info:focus,
+.btn-info.disabled.focus,
+.btn-info[disabled].focus,
+fieldset[disabled] .btn-info.focus,
+.btn-info.disabled:active,
+.btn-info[disabled]:active,
+fieldset[disabled] .btn-info:active,
+.btn-info.disabled.active,
+.btn-info[disabled].active,
+fieldset[disabled] .btn-info.active {
+ background-color: #2aabd2;
+ background-image: none;
+}
+.btn-warning {
+ background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
+ background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
+ background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+ background-repeat: repeat-x;
+ border-color: #e38d13;
+}
+.btn-warning:hover,
+.btn-warning:focus {
+ background-color: #eb9316;
+ background-position: 0 -15px;
+}
+.btn-warning:active,
+.btn-warning.active {
+ background-color: #eb9316;
+ border-color: #e38d13;
+}
+.btn-warning.disabled,
+.btn-warning[disabled],
+fieldset[disabled] .btn-warning,
+.btn-warning.disabled:hover,
+.btn-warning[disabled]:hover,
+fieldset[disabled] .btn-warning:hover,
+.btn-warning.disabled:focus,
+.btn-warning[disabled]:focus,
+fieldset[disabled] .btn-warning:focus,
+.btn-warning.disabled.focus,
+.btn-warning[disabled].focus,
+fieldset[disabled] .btn-warning.focus,
+.btn-warning.disabled:active,
+.btn-warning[disabled]:active,
+fieldset[disabled] .btn-warning:active,
+.btn-warning.disabled.active,
+.btn-warning[disabled].active,
+fieldset[disabled] .btn-warning.active {
+ background-color: #eb9316;
+ background-image: none;
+}
+.btn-danger {
+ background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
+ background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
+ background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+ background-repeat: repeat-x;
+ border-color: #b92c28;
+}
+.btn-danger:hover,
+.btn-danger:focus {
+ background-color: #c12e2a;
+ background-position: 0 -15px;
+}
+.btn-danger:active,
+.btn-danger.active {
+ background-color: #c12e2a;
+ border-color: #b92c28;
+}
+.btn-danger.disabled,
+.btn-danger[disabled],
+fieldset[disabled] .btn-danger,
+.btn-danger.disabled:hover,
+.btn-danger[disabled]:hover,
+fieldset[disabled] .btn-danger:hover,
+.btn-danger.disabled:focus,
+.btn-danger[disabled]:focus,
+fieldset[disabled] .btn-danger:focus,
+.btn-danger.disabled.focus,
+.btn-danger[disabled].focus,
+fieldset[disabled] .btn-danger.focus,
+.btn-danger.disabled:active,
+.btn-danger[disabled]:active,
+fieldset[disabled] .btn-danger:active,
+.btn-danger.disabled.active,
+.btn-danger[disabled].active,
+fieldset[disabled] .btn-danger.active {
+ background-color: #c12e2a;
+ background-image: none;
+}
+.thumbnail,
+.img-thumbnail {
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
+ box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
+}
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus {
+ background-color: #e8e8e8;
+ background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+ background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
+ background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
+ background-repeat: repeat-x;
+}
+.dropdown-menu > .active > a,
+.dropdown-menu > .active > a:hover,
+.dropdown-menu > .active > a:focus {
+ background-color: #2e6da4;
+ background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+ background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
+ background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
+ background-repeat: repeat-x;
+}
+.navbar-default {
+ background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
+ background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
+ background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+ background-repeat: repeat-x;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
+}
+.navbar-default .navbar-nav > .open > a,
+.navbar-default .navbar-nav > .active > a {
+ background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
+ background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
+ background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
+ background-repeat: repeat-x;
+ -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
+}
+.navbar-brand,
+.navbar-nav > li > a {
+ text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
+}
+.navbar-inverse {
+ background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
+ background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
+ background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+ background-repeat: repeat-x;
+ border-radius: 4px;
+}
+.navbar-inverse .navbar-nav > .open > a,
+.navbar-inverse .navbar-nav > .active > a {
+ background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
+ background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
+ background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
+ background-repeat: repeat-x;
+ -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
+ box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
+}
+.navbar-inverse .navbar-brand,
+.navbar-inverse .navbar-nav > li > a {
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
+}
+.navbar-static-top,
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+ border-radius: 0;
+}
+@media (max-width: 767px) {
+ .navbar .navbar-nav .open .dropdown-menu > .active > a,
+ .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
+ .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
+ color: #fff;
+ background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+ background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
+ background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
+ background-repeat: repeat-x;
+ }
+}
+.alert {
+ text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
+}
+.alert-success {
+ background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
+ background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
+ background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
+ background-repeat: repeat-x;
+ border-color: #b2dba1;
+}
+.alert-info {
+ background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
+ background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
+ background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
+ background-repeat: repeat-x;
+ border-color: #9acfea;
+}
+.alert-warning {
+ background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
+ background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
+ background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
+ background-repeat: repeat-x;
+ border-color: #f5e79e;
+}
+.alert-danger {
+ background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
+ background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
+ background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
+ background-repeat: repeat-x;
+ border-color: #dca7a7;
+}
+.progress {
+ background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
+ background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
+ background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
+ background-repeat: repeat-x;
+}
+.progress-bar {
+ background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
+ background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
+ background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
+ background-repeat: repeat-x;
+}
+.progress-bar-success {
+ background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
+ background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
+ background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
+ background-repeat: repeat-x;
+}
+.progress-bar-info {
+ background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
+ background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
+ background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
+ background-repeat: repeat-x;
+}
+.progress-bar-warning {
+ background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
+ background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
+ background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
+ background-repeat: repeat-x;
+}
+.progress-bar-danger {
+ background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
+ background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
+ background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
+ background-repeat: repeat-x;
+}
+.progress-bar-striped {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.list-group {
+ border-radius: 4px;
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
+ box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
+}
+.list-group-item.active,
+.list-group-item.active:hover,
+.list-group-item.active:focus {
+ text-shadow: 0 -1px 0 #286090;
+ background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
+ background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
+ background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
+ background-repeat: repeat-x;
+ border-color: #2b669a;
+}
+.list-group-item.active .badge,
+.list-group-item.active:hover .badge,
+.list-group-item.active:focus .badge {
+ text-shadow: none;
+}
+.panel {
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
+ box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
+}
+.panel-default > .panel-heading {
+ background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+ background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
+ background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
+ background-repeat: repeat-x;
+}
+.panel-primary > .panel-heading {
+ background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+ background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
+ background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
+ background-repeat: repeat-x;
+}
+.panel-success > .panel-heading {
+ background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
+ background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
+ background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
+ background-repeat: repeat-x;
+}
+.panel-info > .panel-heading {
+ background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
+ background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
+ background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
+ background-repeat: repeat-x;
+}
+.panel-warning > .panel-heading {
+ background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
+ background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
+ background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
+ background-repeat: repeat-x;
+}
+.panel-danger > .panel-heading {
+ background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
+ background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
+ background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
+ background-repeat: repeat-x;
+}
+.well {
+ background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
+ background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
+ background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
+ background-repeat: repeat-x;
+ border-color: #dcdcdc;
+ -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
+}
+/*# sourceMappingURL=bootstrap-theme.css.map */
diff --git a/GitCandy.Web/Content/bootstrap-theme.css.map b/GitCandy.Web/Content/bootstrap-theme.css.map
new file mode 100644
index 0000000..d876f60
--- /dev/null
+++ b/GitCandy.Web/Content/bootstrap-theme.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["bootstrap-theme.css","less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"AAAA;;;;GAIG;ACeH;;;;;;EAME,yCAAA;EC2CA,4FAAA;EACQ,oFAAA;CFvDT;ACgBC;;;;;;;;;;;;ECsCA,yDAAA;EACQ,iDAAA;CFxCT;ACMC;;;;;;;;;;;;;;;;;;ECiCA,yBAAA;EACQ,iBAAA;CFnBT;AC/BD;;;;;;EAuBI,kBAAA;CDgBH;ACyBC;;EAEE,uBAAA;CDvBH;AC4BD;EErEI,sEAAA;EACA,iEAAA;EACA,2FAAA;EAAA,oEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;EAuC2C,0BAAA;EAA2B,mBAAA;CDjBvE;ACpBC;;EAEE,0BAAA;EACA,6BAAA;CDsBH;ACnBC;;EAEE,0BAAA;EACA,sBAAA;CDqBH;ACfG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CD6BL;ACbD;EEtEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CD8DD;AC5DC;;EAEE,0BAAA;EACA,6BAAA;CD8DH;AC3DC;;EAEE,0BAAA;EACA,sBAAA;CD6DH;ACvDG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CDqEL;ACpDD;EEvEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CDsGD;ACpGC;;EAEE,0BAAA;EACA,6BAAA;CDsGH;ACnGC;;EAEE,0BAAA;EACA,sBAAA;CDqGH;AC/FG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CD6GL;AC3FD;EExEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CD8ID;AC5IC;;EAEE,0BAAA;EACA,6BAAA;CD8IH;AC3IC;;EAEE,0BAAA;EACA,sBAAA;CD6IH;ACvIG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CDqJL;AClID;EEzEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CDsLD;ACpLC;;EAEE,0BAAA;EACA,6BAAA;CDsLH;ACnLC;;EAEE,0BAAA;EACA,sBAAA;CDqLH;AC/KG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CD6LL;ACzKD;EE1EI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CD8ND;AC5NC;;EAEE,0BAAA;EACA,6BAAA;CD8NH;AC3NC;;EAEE,0BAAA;EACA,sBAAA;CD6NH;ACvNG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CDqOL;AC1MD;;EClCE,mDAAA;EACQ,2CAAA;CFgPT;ACrMD;;EE3FI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF0FF,0BAAA;CD2MD;ACzMD;;;EEhGI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EFgGF,0BAAA;CD+MD;ACtMD;EE7GI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;ECnBF,oEAAA;EH+HA,mBAAA;ECjEA,4FAAA;EACQ,oFAAA;CF8QT;ACjND;;EE7GI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;ED2CF,yDAAA;EACQ,iDAAA;CFwRT;AC9MD;;EAEE,+CAAA;CDgND;AC5MD;EEhII,sEAAA;EACA,iEAAA;EACA,2FAAA;EAAA,oEAAA;EACA,4BAAA;EACA,uHAAA;ECnBF,oEAAA;EHkJA,mBAAA;CDkND;ACrND;;EEhII,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;ED2CF,wDAAA;EACQ,gDAAA;CF+ST;AC/ND;;EAYI,0CAAA;CDuNH;AClND;;;EAGE,iBAAA;CDoND;AC/LD;EAfI;;;IAGE,YAAA;IE7JF,yEAAA;IACA,oEAAA;IACA,8FAAA;IAAA,uEAAA;IACA,4BAAA;IACA,uHAAA;GH+WD;CACF;AC3MD;EACE,8CAAA;EC3HA,2FAAA;EACQ,mFAAA;CFyUT;ACnMD;EEtLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CD+MD;AC1MD;EEvLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CDuND;ACjND;EExLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CD+ND;ACxND;EEzLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CDuOD;ACxND;EEjMI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH4ZH;ACrND;EE3MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHmaH;AC3ND;EE5MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH0aH;ACjOD;EE7MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHibH;ACvOD;EE9MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHwbH;AC7OD;EE/MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH+bH;AChPD;EElLI,8MAAA;EACA,yMAAA;EACA,sMAAA;CHqaH;AC5OD;EACE,mBAAA;EC9KA,mDAAA;EACQ,2CAAA;CF6ZT;AC7OD;;;EAGE,8BAAA;EEnOE,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EFiOF,sBAAA;CDmPD;ACxPD;;;EAQI,kBAAA;CDqPH;AC3OD;ECnME,kDAAA;EACQ,0CAAA;CFibT;ACrOD;EE5PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHoeH;AC3OD;EE7PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH2eH;ACjPD;EE9PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHkfH;ACvPD;EE/PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHyfH;AC7PD;EEhQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHggBH;ACnQD;EEjQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHugBH;ACnQD;EExQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EFsQF,sBAAA;EC3NA,0FAAA;EACQ,kFAAA;CFqeT","file":"bootstrap-theme.css","sourcesContent":["/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #265a88;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #265a88;\n border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #265a88;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-color: #2e6da4;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n@media (max-width: 767px) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n }\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n}\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #286090;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]}
\ No newline at end of file
diff --git a/GitCandy.Web/Content/bootstrap-theme.min.css b/GitCandy.Web/Content/bootstrap-theme.min.css
new file mode 100644
index 0000000..5e39401
--- /dev/null
+++ b/GitCandy.Web/Content/bootstrap-theme.min.css
@@ -0,0 +1,6 @@
+/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}
+/*# sourceMappingURL=bootstrap-theme.min.css.map */
\ No newline at end of file
diff --git a/GitCandy.Web/Content/bootstrap-theme.min.css.map b/GitCandy.Web/Content/bootstrap-theme.min.css.map
new file mode 100644
index 0000000..94813e9
--- /dev/null
+++ b/GitCandy.Web/Content/bootstrap-theme.min.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":";;;;AAmBA,YAAA,aAAA,UAAA,aAAA,aAAA,aAME,YAAA,EAAA,KAAA,EAAA,eC2CA,mBAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBDvCR,mBAAA,mBAAA,oBAAA,oBAAA,iBAAA,iBAAA,oBAAA,oBAAA,oBAAA,oBAAA,oBAAA,oBCsCA,mBAAA,MAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,iBDlCR,qBAAA,sBAAA,sBAAA,uBAAA,mBAAA,oBAAA,sBAAA,uBAAA,sBAAA,uBAAA,sBAAA,uBAAA,+BAAA,gCAAA,6BAAA,gCAAA,gCAAA,gCCiCA,mBAAA,KACQ,WAAA,KDlDV,mBAAA,oBAAA,iBAAA,oBAAA,oBAAA,oBAuBI,YAAA,KAyCF,YAAA,YAEE,iBAAA,KAKJ,aErEI,YAAA,EAAA,IAAA,EAAA,KACA,iBAAA,iDACA,iBAAA,4CAAA,iBAAA,qEAEA,iBAAA,+CCnBF,OAAA,+GH4CA,OAAA,0DACA,kBAAA,SAuC2C,aAAA,QAA2B,aAAA,KArCtE,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAgBN,aEtEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAiBN,aEvEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAkBN,UExEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,gBAAA,gBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,iBAAA,iBAEE,iBAAA,QACA,aAAA,QAMA,mBAAA,0BAAA,yBAAA,0BAAA,yBAAA,yBAAA,oBAAA,2BAAA,0BAAA,2BAAA,0BAAA,0BAAA,6BAAA,oCAAA,mCAAA,oCAAA,mCAAA,mCAME,iBAAA,QACA,iBAAA,KAmBN,aEzEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAoBN,YE1EI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,kBAAA,kBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,mBAAA,mBAEE,iBAAA,QACA,aAAA,QAMA,qBAAA,4BAAA,2BAAA,4BAAA,2BAAA,2BAAA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,+BAAA,sCAAA,qCAAA,sCAAA,qCAAA,qCAME,iBAAA,QACA,iBAAA,KA2BN,eAAA,WClCE,mBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,EAAA,IAAA,IAAA,iBD2CV,0BAAA,0BE3FI,iBAAA,QACA,iBAAA,oDACA,iBAAA,+CAAA,iBAAA,wEACA,iBAAA,kDACA,OAAA,+GF0FF,kBAAA,SAEF,yBAAA,+BAAA,+BEhGI,iBAAA,QACA,iBAAA,oDACA,iBAAA,+CAAA,iBAAA,wEACA,iBAAA,kDACA,OAAA,+GFgGF,kBAAA,SASF,gBE7GI,iBAAA,iDACA,iBAAA,4CACA,iBAAA,qEAAA,iBAAA,+CACA,OAAA,+GACA,OAAA,0DCnBF,kBAAA,SH+HA,cAAA,ICjEA,mBAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBD6DV,sCAAA,oCE7GI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SD2CF,mBAAA,MAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,iBD0EV,cAAA,iBAEE,YAAA,EAAA,IAAA,EAAA,sBAIF,gBEhII,iBAAA,iDACA,iBAAA,4CACA,iBAAA,qEAAA,iBAAA,+CACA,OAAA,+GACA,OAAA,0DCnBF,kBAAA,SHkJA,cAAA,IAHF,sCAAA,oCEhII,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SD2CF,mBAAA,MAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,gBDgFV,8BAAA,iCAYI,YAAA,EAAA,KAAA,EAAA,gBAKJ,qBAAA,kBAAA,mBAGE,cAAA,EAqBF,yBAfI,mDAAA,yDAAA,yDAGE,MAAA,KE7JF,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,UFqKJ,OACE,YAAA,EAAA,IAAA,EAAA,qBC3HA,mBAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,gBDsIV,eEtLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAKF,YEvLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAMF,eExLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAOF,cEzLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAeF,UEjMI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFuMJ,cE3MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFwMJ,sBE5MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFyMJ,mBE7MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF0MJ,sBE9MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF2MJ,qBE/MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF+MJ,sBElLI,iBAAA,yKACA,iBAAA,oKACA,iBAAA,iKFyLJ,YACE,cAAA,IC9KA,mBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,EAAA,IAAA,IAAA,iBDgLV,wBAAA,8BAAA,8BAGE,YAAA,EAAA,KAAA,EAAA,QEnOE,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFiOF,aAAA,QALF,+BAAA,qCAAA,qCAQI,YAAA,KAUJ,OCnME,mBAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,EAAA,IAAA,IAAA,gBD4MV,8BE5PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFyPJ,8BE7PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF0PJ,8BE9PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF2PJ,2BE/PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF4PJ,8BEhQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF6PJ,6BEjQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFoQJ,MExQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFsQF,aAAA,QC3NA,mBAAA,MAAA,EAAA,IAAA,IAAA,gBAAA,EAAA,IAAA,EAAA,qBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,gBAAA,EAAA,IAAA,EAAA","sourcesContent":["/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]}
\ No newline at end of file
diff --git a/GitCandy.Web/Content/bootstrap.css b/GitCandy.Web/Content/bootstrap.css
new file mode 100644
index 0000000..6167622
--- /dev/null
+++ b/GitCandy.Web/Content/bootstrap.css
@@ -0,0 +1,6757 @@
+/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
+html {
+ font-family: sans-serif;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+body {
+ margin: 0;
+}
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+ display: block;
+}
+audio,
+canvas,
+progress,
+video {
+ display: inline-block;
+ vertical-align: baseline;
+}
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+[hidden],
+template {
+ display: none;
+}
+a {
+ background-color: transparent;
+}
+a:active,
+a:hover {
+ outline: 0;
+}
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+b,
+strong {
+ font-weight: bold;
+}
+dfn {
+ font-style: italic;
+}
+h1 {
+ margin: .67em 0;
+ font-size: 2em;
+}
+mark {
+ color: #000;
+ background: #ff0;
+}
+small {
+ font-size: 80%;
+}
+sub,
+sup {
+ position: relative;
+ font-size: 75%;
+ line-height: 0;
+ vertical-align: baseline;
+}
+sup {
+ top: -.5em;
+}
+sub {
+ bottom: -.25em;
+}
+img {
+ border: 0;
+}
+svg:not(:root) {
+ overflow: hidden;
+}
+figure {
+ margin: 1em 40px;
+}
+hr {
+ height: 0;
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+pre {
+ overflow: auto;
+}
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+button,
+input,
+optgroup,
+select,
+textarea {
+ margin: 0;
+ font: inherit;
+ color: inherit;
+}
+button {
+ overflow: visible;
+}
+button,
+select {
+ text-transform: none;
+}
+button,
+html input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button;
+ cursor: pointer;
+}
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ padding: 0;
+ border: 0;
+}
+input {
+ line-height: normal;
+}
+input[type="checkbox"],
+input[type="radio"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 0;
+}
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+input[type="search"] {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ -webkit-appearance: textfield;
+}
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+fieldset {
+ padding: .35em .625em .75em;
+ margin: 0 2px;
+ border: 1px solid #c0c0c0;
+}
+legend {
+ padding: 0;
+ border: 0;
+}
+textarea {
+ overflow: auto;
+}
+optgroup {
+ font-weight: bold;
+}
+table {
+ border-spacing: 0;
+ border-collapse: collapse;
+}
+td,
+th {
+ padding: 0;
+}
+/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
+@media print {
+ *,
+ *:before,
+ *:after {
+ color: #000 !important;
+ text-shadow: none !important;
+ background: transparent !important;
+ -webkit-box-shadow: none !important;
+ box-shadow: none !important;
+ }
+ a,
+ a:visited {
+ text-decoration: underline;
+ }
+ a[href]:after {
+ content: " (" attr(href) ")";
+ }
+ abbr[title]:after {
+ content: " (" attr(title) ")";
+ }
+ a[href^="#"]:after,
+ a[href^="javascript:"]:after {
+ content: "";
+ }
+ pre,
+ blockquote {
+ border: 1px solid #999;
+
+ page-break-inside: avoid;
+ }
+ thead {
+ display: table-header-group;
+ }
+ tr,
+ img {
+ page-break-inside: avoid;
+ }
+ img {
+ max-width: 100% !important;
+ }
+ p,
+ h2,
+ h3 {
+ orphans: 3;
+ widows: 3;
+ }
+ h2,
+ h3 {
+ page-break-after: avoid;
+ }
+ .navbar {
+ display: none;
+ }
+ .btn > .caret,
+ .dropup > .btn > .caret {
+ border-top-color: #000 !important;
+ }
+ .label {
+ border: 1px solid #000;
+ }
+ .table {
+ border-collapse: collapse !important;
+ }
+ .table td,
+ .table th {
+ background-color: #fff !important;
+ }
+ .table-bordered th,
+ .table-bordered td {
+ border: 1px solid #ddd !important;
+ }
+}
+@font-face {
+ font-family: 'Glyphicons Halflings';
+
+ src: url('../fonts/glyphicons-halflings-regular.eot');
+ src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
+}
+.glyphicon {
+ position: relative;
+ top: 1px;
+ display: inline-block;
+ font-family: 'Glyphicons Halflings';
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1;
+
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+.glyphicon-asterisk:before {
+ content: "\002a";
+}
+.glyphicon-plus:before {
+ content: "\002b";
+}
+.glyphicon-euro:before,
+.glyphicon-eur:before {
+ content: "\20ac";
+}
+.glyphicon-minus:before {
+ content: "\2212";
+}
+.glyphicon-cloud:before {
+ content: "\2601";
+}
+.glyphicon-envelope:before {
+ content: "\2709";
+}
+.glyphicon-pencil:before {
+ content: "\270f";
+}
+.glyphicon-glass:before {
+ content: "\e001";
+}
+.glyphicon-music:before {
+ content: "\e002";
+}
+.glyphicon-search:before {
+ content: "\e003";
+}
+.glyphicon-heart:before {
+ content: "\e005";
+}
+.glyphicon-star:before {
+ content: "\e006";
+}
+.glyphicon-star-empty:before {
+ content: "\e007";
+}
+.glyphicon-user:before {
+ content: "\e008";
+}
+.glyphicon-film:before {
+ content: "\e009";
+}
+.glyphicon-th-large:before {
+ content: "\e010";
+}
+.glyphicon-th:before {
+ content: "\e011";
+}
+.glyphicon-th-list:before {
+ content: "\e012";
+}
+.glyphicon-ok:before {
+ content: "\e013";
+}
+.glyphicon-remove:before {
+ content: "\e014";
+}
+.glyphicon-zoom-in:before {
+ content: "\e015";
+}
+.glyphicon-zoom-out:before {
+ content: "\e016";
+}
+.glyphicon-off:before {
+ content: "\e017";
+}
+.glyphicon-signal:before {
+ content: "\e018";
+}
+.glyphicon-cog:before {
+ content: "\e019";
+}
+.glyphicon-trash:before {
+ content: "\e020";
+}
+.glyphicon-home:before {
+ content: "\e021";
+}
+.glyphicon-file:before {
+ content: "\e022";
+}
+.glyphicon-time:before {
+ content: "\e023";
+}
+.glyphicon-road:before {
+ content: "\e024";
+}
+.glyphicon-download-alt:before {
+ content: "\e025";
+}
+.glyphicon-download:before {
+ content: "\e026";
+}
+.glyphicon-upload:before {
+ content: "\e027";
+}
+.glyphicon-inbox:before {
+ content: "\e028";
+}
+.glyphicon-play-circle:before {
+ content: "\e029";
+}
+.glyphicon-repeat:before {
+ content: "\e030";
+}
+.glyphicon-refresh:before {
+ content: "\e031";
+}
+.glyphicon-list-alt:before {
+ content: "\e032";
+}
+.glyphicon-lock:before {
+ content: "\e033";
+}
+.glyphicon-flag:before {
+ content: "\e034";
+}
+.glyphicon-headphones:before {
+ content: "\e035";
+}
+.glyphicon-volume-off:before {
+ content: "\e036";
+}
+.glyphicon-volume-down:before {
+ content: "\e037";
+}
+.glyphicon-volume-up:before {
+ content: "\e038";
+}
+.glyphicon-qrcode:before {
+ content: "\e039";
+}
+.glyphicon-barcode:before {
+ content: "\e040";
+}
+.glyphicon-tag:before {
+ content: "\e041";
+}
+.glyphicon-tags:before {
+ content: "\e042";
+}
+.glyphicon-book:before {
+ content: "\e043";
+}
+.glyphicon-bookmark:before {
+ content: "\e044";
+}
+.glyphicon-print:before {
+ content: "\e045";
+}
+.glyphicon-camera:before {
+ content: "\e046";
+}
+.glyphicon-font:before {
+ content: "\e047";
+}
+.glyphicon-bold:before {
+ content: "\e048";
+}
+.glyphicon-italic:before {
+ content: "\e049";
+}
+.glyphicon-text-height:before {
+ content: "\e050";
+}
+.glyphicon-text-width:before {
+ content: "\e051";
+}
+.glyphicon-align-left:before {
+ content: "\e052";
+}
+.glyphicon-align-center:before {
+ content: "\e053";
+}
+.glyphicon-align-right:before {
+ content: "\e054";
+}
+.glyphicon-align-justify:before {
+ content: "\e055";
+}
+.glyphicon-list:before {
+ content: "\e056";
+}
+.glyphicon-indent-left:before {
+ content: "\e057";
+}
+.glyphicon-indent-right:before {
+ content: "\e058";
+}
+.glyphicon-facetime-video:before {
+ content: "\e059";
+}
+.glyphicon-picture:before {
+ content: "\e060";
+}
+.glyphicon-map-marker:before {
+ content: "\e062";
+}
+.glyphicon-adjust:before {
+ content: "\e063";
+}
+.glyphicon-tint:before {
+ content: "\e064";
+}
+.glyphicon-edit:before {
+ content: "\e065";
+}
+.glyphicon-share:before {
+ content: "\e066";
+}
+.glyphicon-check:before {
+ content: "\e067";
+}
+.glyphicon-move:before {
+ content: "\e068";
+}
+.glyphicon-step-backward:before {
+ content: "\e069";
+}
+.glyphicon-fast-backward:before {
+ content: "\e070";
+}
+.glyphicon-backward:before {
+ content: "\e071";
+}
+.glyphicon-play:before {
+ content: "\e072";
+}
+.glyphicon-pause:before {
+ content: "\e073";
+}
+.glyphicon-stop:before {
+ content: "\e074";
+}
+.glyphicon-forward:before {
+ content: "\e075";
+}
+.glyphicon-fast-forward:before {
+ content: "\e076";
+}
+.glyphicon-step-forward:before {
+ content: "\e077";
+}
+.glyphicon-eject:before {
+ content: "\e078";
+}
+.glyphicon-chevron-left:before {
+ content: "\e079";
+}
+.glyphicon-chevron-right:before {
+ content: "\e080";
+}
+.glyphicon-plus-sign:before {
+ content: "\e081";
+}
+.glyphicon-minus-sign:before {
+ content: "\e082";
+}
+.glyphicon-remove-sign:before {
+ content: "\e083";
+}
+.glyphicon-ok-sign:before {
+ content: "\e084";
+}
+.glyphicon-question-sign:before {
+ content: "\e085";
+}
+.glyphicon-info-sign:before {
+ content: "\e086";
+}
+.glyphicon-screenshot:before {
+ content: "\e087";
+}
+.glyphicon-remove-circle:before {
+ content: "\e088";
+}
+.glyphicon-ok-circle:before {
+ content: "\e089";
+}
+.glyphicon-ban-circle:before {
+ content: "\e090";
+}
+.glyphicon-arrow-left:before {
+ content: "\e091";
+}
+.glyphicon-arrow-right:before {
+ content: "\e092";
+}
+.glyphicon-arrow-up:before {
+ content: "\e093";
+}
+.glyphicon-arrow-down:before {
+ content: "\e094";
+}
+.glyphicon-share-alt:before {
+ content: "\e095";
+}
+.glyphicon-resize-full:before {
+ content: "\e096";
+}
+.glyphicon-resize-small:before {
+ content: "\e097";
+}
+.glyphicon-exclamation-sign:before {
+ content: "\e101";
+}
+.glyphicon-gift:before {
+ content: "\e102";
+}
+.glyphicon-leaf:before {
+ content: "\e103";
+}
+.glyphicon-fire:before {
+ content: "\e104";
+}
+.glyphicon-eye-open:before {
+ content: "\e105";
+}
+.glyphicon-eye-close:before {
+ content: "\e106";
+}
+.glyphicon-warning-sign:before {
+ content: "\e107";
+}
+.glyphicon-plane:before {
+ content: "\e108";
+}
+.glyphicon-calendar:before {
+ content: "\e109";
+}
+.glyphicon-random:before {
+ content: "\e110";
+}
+.glyphicon-comment:before {
+ content: "\e111";
+}
+.glyphicon-magnet:before {
+ content: "\e112";
+}
+.glyphicon-chevron-up:before {
+ content: "\e113";
+}
+.glyphicon-chevron-down:before {
+ content: "\e114";
+}
+.glyphicon-retweet:before {
+ content: "\e115";
+}
+.glyphicon-shopping-cart:before {
+ content: "\e116";
+}
+.glyphicon-folder-close:before {
+ content: "\e117";
+}
+.glyphicon-folder-open:before {
+ content: "\e118";
+}
+.glyphicon-resize-vertical:before {
+ content: "\e119";
+}
+.glyphicon-resize-horizontal:before {
+ content: "\e120";
+}
+.glyphicon-hdd:before {
+ content: "\e121";
+}
+.glyphicon-bullhorn:before {
+ content: "\e122";
+}
+.glyphicon-bell:before {
+ content: "\e123";
+}
+.glyphicon-certificate:before {
+ content: "\e124";
+}
+.glyphicon-thumbs-up:before {
+ content: "\e125";
+}
+.glyphicon-thumbs-down:before {
+ content: "\e126";
+}
+.glyphicon-hand-right:before {
+ content: "\e127";
+}
+.glyphicon-hand-left:before {
+ content: "\e128";
+}
+.glyphicon-hand-up:before {
+ content: "\e129";
+}
+.glyphicon-hand-down:before {
+ content: "\e130";
+}
+.glyphicon-circle-arrow-right:before {
+ content: "\e131";
+}
+.glyphicon-circle-arrow-left:before {
+ content: "\e132";
+}
+.glyphicon-circle-arrow-up:before {
+ content: "\e133";
+}
+.glyphicon-circle-arrow-down:before {
+ content: "\e134";
+}
+.glyphicon-globe:before {
+ content: "\e135";
+}
+.glyphicon-wrench:before {
+ content: "\e136";
+}
+.glyphicon-tasks:before {
+ content: "\e137";
+}
+.glyphicon-filter:before {
+ content: "\e138";
+}
+.glyphicon-briefcase:before {
+ content: "\e139";
+}
+.glyphicon-fullscreen:before {
+ content: "\e140";
+}
+.glyphicon-dashboard:before {
+ content: "\e141";
+}
+.glyphicon-paperclip:before {
+ content: "\e142";
+}
+.glyphicon-heart-empty:before {
+ content: "\e143";
+}
+.glyphicon-link:before {
+ content: "\e144";
+}
+.glyphicon-phone:before {
+ content: "\e145";
+}
+.glyphicon-pushpin:before {
+ content: "\e146";
+}
+.glyphicon-usd:before {
+ content: "\e148";
+}
+.glyphicon-gbp:before {
+ content: "\e149";
+}
+.glyphicon-sort:before {
+ content: "\e150";
+}
+.glyphicon-sort-by-alphabet:before {
+ content: "\e151";
+}
+.glyphicon-sort-by-alphabet-alt:before {
+ content: "\e152";
+}
+.glyphicon-sort-by-order:before {
+ content: "\e153";
+}
+.glyphicon-sort-by-order-alt:before {
+ content: "\e154";
+}
+.glyphicon-sort-by-attributes:before {
+ content: "\e155";
+}
+.glyphicon-sort-by-attributes-alt:before {
+ content: "\e156";
+}
+.glyphicon-unchecked:before {
+ content: "\e157";
+}
+.glyphicon-expand:before {
+ content: "\e158";
+}
+.glyphicon-collapse-down:before {
+ content: "\e159";
+}
+.glyphicon-collapse-up:before {
+ content: "\e160";
+}
+.glyphicon-log-in:before {
+ content: "\e161";
+}
+.glyphicon-flash:before {
+ content: "\e162";
+}
+.glyphicon-log-out:before {
+ content: "\e163";
+}
+.glyphicon-new-window:before {
+ content: "\e164";
+}
+.glyphicon-record:before {
+ content: "\e165";
+}
+.glyphicon-save:before {
+ content: "\e166";
+}
+.glyphicon-open:before {
+ content: "\e167";
+}
+.glyphicon-saved:before {
+ content: "\e168";
+}
+.glyphicon-import:before {
+ content: "\e169";
+}
+.glyphicon-export:before {
+ content: "\e170";
+}
+.glyphicon-send:before {
+ content: "\e171";
+}
+.glyphicon-floppy-disk:before {
+ content: "\e172";
+}
+.glyphicon-floppy-saved:before {
+ content: "\e173";
+}
+.glyphicon-floppy-remove:before {
+ content: "\e174";
+}
+.glyphicon-floppy-save:before {
+ content: "\e175";
+}
+.glyphicon-floppy-open:before {
+ content: "\e176";
+}
+.glyphicon-credit-card:before {
+ content: "\e177";
+}
+.glyphicon-transfer:before {
+ content: "\e178";
+}
+.glyphicon-cutlery:before {
+ content: "\e179";
+}
+.glyphicon-header:before {
+ content: "\e180";
+}
+.glyphicon-compressed:before {
+ content: "\e181";
+}
+.glyphicon-earphone:before {
+ content: "\e182";
+}
+.glyphicon-phone-alt:before {
+ content: "\e183";
+}
+.glyphicon-tower:before {
+ content: "\e184";
+}
+.glyphicon-stats:before {
+ content: "\e185";
+}
+.glyphicon-sd-video:before {
+ content: "\e186";
+}
+.glyphicon-hd-video:before {
+ content: "\e187";
+}
+.glyphicon-subtitles:before {
+ content: "\e188";
+}
+.glyphicon-sound-stereo:before {
+ content: "\e189";
+}
+.glyphicon-sound-dolby:before {
+ content: "\e190";
+}
+.glyphicon-sound-5-1:before {
+ content: "\e191";
+}
+.glyphicon-sound-6-1:before {
+ content: "\e192";
+}
+.glyphicon-sound-7-1:before {
+ content: "\e193";
+}
+.glyphicon-copyright-mark:before {
+ content: "\e194";
+}
+.glyphicon-registration-mark:before {
+ content: "\e195";
+}
+.glyphicon-cloud-download:before {
+ content: "\e197";
+}
+.glyphicon-cloud-upload:before {
+ content: "\e198";
+}
+.glyphicon-tree-conifer:before {
+ content: "\e199";
+}
+.glyphicon-tree-deciduous:before {
+ content: "\e200";
+}
+.glyphicon-cd:before {
+ content: "\e201";
+}
+.glyphicon-save-file:before {
+ content: "\e202";
+}
+.glyphicon-open-file:before {
+ content: "\e203";
+}
+.glyphicon-level-up:before {
+ content: "\e204";
+}
+.glyphicon-copy:before {
+ content: "\e205";
+}
+.glyphicon-paste:before {
+ content: "\e206";
+}
+.glyphicon-alert:before {
+ content: "\e209";
+}
+.glyphicon-equalizer:before {
+ content: "\e210";
+}
+.glyphicon-king:before {
+ content: "\e211";
+}
+.glyphicon-queen:before {
+ content: "\e212";
+}
+.glyphicon-pawn:before {
+ content: "\e213";
+}
+.glyphicon-bishop:before {
+ content: "\e214";
+}
+.glyphicon-knight:before {
+ content: "\e215";
+}
+.glyphicon-baby-formula:before {
+ content: "\e216";
+}
+.glyphicon-tent:before {
+ content: "\26fa";
+}
+.glyphicon-blackboard:before {
+ content: "\e218";
+}
+.glyphicon-bed:before {
+ content: "\e219";
+}
+.glyphicon-apple:before {
+ content: "\f8ff";
+}
+.glyphicon-erase:before {
+ content: "\e221";
+}
+.glyphicon-hourglass:before {
+ content: "\231b";
+}
+.glyphicon-lamp:before {
+ content: "\e223";
+}
+.glyphicon-duplicate:before {
+ content: "\e224";
+}
+.glyphicon-piggy-bank:before {
+ content: "\e225";
+}
+.glyphicon-scissors:before {
+ content: "\e226";
+}
+.glyphicon-bitcoin:before {
+ content: "\e227";
+}
+.glyphicon-btc:before {
+ content: "\e227";
+}
+.glyphicon-xbt:before {
+ content: "\e227";
+}
+.glyphicon-yen:before {
+ content: "\00a5";
+}
+.glyphicon-jpy:before {
+ content: "\00a5";
+}
+.glyphicon-ruble:before {
+ content: "\20bd";
+}
+.glyphicon-rub:before {
+ content: "\20bd";
+}
+.glyphicon-scale:before {
+ content: "\e230";
+}
+.glyphicon-ice-lolly:before {
+ content: "\e231";
+}
+.glyphicon-ice-lolly-tasted:before {
+ content: "\e232";
+}
+.glyphicon-education:before {
+ content: "\e233";
+}
+.glyphicon-option-horizontal:before {
+ content: "\e234";
+}
+.glyphicon-option-vertical:before {
+ content: "\e235";
+}
+.glyphicon-menu-hamburger:before {
+ content: "\e236";
+}
+.glyphicon-modal-window:before {
+ content: "\e237";
+}
+.glyphicon-oil:before {
+ content: "\e238";
+}
+.glyphicon-grain:before {
+ content: "\e239";
+}
+.glyphicon-sunglasses:before {
+ content: "\e240";
+}
+.glyphicon-text-size:before {
+ content: "\e241";
+}
+.glyphicon-text-color:before {
+ content: "\e242";
+}
+.glyphicon-text-background:before {
+ content: "\e243";
+}
+.glyphicon-object-align-top:before {
+ content: "\e244";
+}
+.glyphicon-object-align-bottom:before {
+ content: "\e245";
+}
+.glyphicon-object-align-horizontal:before {
+ content: "\e246";
+}
+.glyphicon-object-align-left:before {
+ content: "\e247";
+}
+.glyphicon-object-align-vertical:before {
+ content: "\e248";
+}
+.glyphicon-object-align-right:before {
+ content: "\e249";
+}
+.glyphicon-triangle-right:before {
+ content: "\e250";
+}
+.glyphicon-triangle-left:before {
+ content: "\e251";
+}
+.glyphicon-triangle-bottom:before {
+ content: "\e252";
+}
+.glyphicon-triangle-top:before {
+ content: "\e253";
+}
+.glyphicon-console:before {
+ content: "\e254";
+}
+.glyphicon-superscript:before {
+ content: "\e255";
+}
+.glyphicon-subscript:before {
+ content: "\e256";
+}
+.glyphicon-menu-left:before {
+ content: "\e257";
+}
+.glyphicon-menu-right:before {
+ content: "\e258";
+}
+.glyphicon-menu-down:before {
+ content: "\e259";
+}
+.glyphicon-menu-up:before {
+ content: "\e260";
+}
+* {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+*:before,
+*:after {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+html {
+ font-size: 10px;
+
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+body {
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #333;
+ background-color: #fff;
+}
+input,
+button,
+select,
+textarea {
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+}
+a {
+ color: #337ab7;
+ text-decoration: none;
+}
+a:hover,
+a:focus {
+ color: #23527c;
+ text-decoration: underline;
+}
+a:focus {
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+figure {
+ margin: 0;
+}
+img {
+ vertical-align: middle;
+}
+.img-responsive,
+.thumbnail > img,
+.thumbnail a > img,
+.carousel-inner > .item > img,
+.carousel-inner > .item > a > img {
+ display: block;
+ max-width: 100%;
+ height: auto;
+}
+.img-rounded {
+ border-radius: 6px;
+}
+.img-thumbnail {
+ display: inline-block;
+ max-width: 100%;
+ height: auto;
+ padding: 4px;
+ line-height: 1.42857143;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ -webkit-transition: all .2s ease-in-out;
+ -o-transition: all .2s ease-in-out;
+ transition: all .2s ease-in-out;
+}
+.img-circle {
+ border-radius: 50%;
+}
+hr {
+ margin-top: 20px;
+ margin-bottom: 20px;
+ border: 0;
+ border-top: 1px solid #eee;
+}
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ border: 0;
+}
+.sr-only-focusable:active,
+.sr-only-focusable:focus {
+ position: static;
+ width: auto;
+ height: auto;
+ margin: 0;
+ overflow: visible;
+ clip: auto;
+}
+[role="button"] {
+ cursor: pointer;
+}
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+.h1,
+.h2,
+.h3,
+.h4,
+.h5,
+.h6 {
+ font-family: inherit;
+ font-weight: 500;
+ line-height: 1.1;
+ color: inherit;
+}
+h1 small,
+h2 small,
+h3 small,
+h4 small,
+h5 small,
+h6 small,
+.h1 small,
+.h2 small,
+.h3 small,
+.h4 small,
+.h5 small,
+.h6 small,
+h1 .small,
+h2 .small,
+h3 .small,
+h4 .small,
+h5 .small,
+h6 .small,
+.h1 .small,
+.h2 .small,
+.h3 .small,
+.h4 .small,
+.h5 .small,
+.h6 .small {
+ font-weight: normal;
+ line-height: 1;
+ color: #777;
+}
+h1,
+.h1,
+h2,
+.h2,
+h3,
+.h3 {
+ margin-top: 20px;
+ margin-bottom: 10px;
+}
+h1 small,
+.h1 small,
+h2 small,
+.h2 small,
+h3 small,
+.h3 small,
+h1 .small,
+.h1 .small,
+h2 .small,
+.h2 .small,
+h3 .small,
+.h3 .small {
+ font-size: 65%;
+}
+h4,
+.h4,
+h5,
+.h5,
+h6,
+.h6 {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+h4 small,
+.h4 small,
+h5 small,
+.h5 small,
+h6 small,
+.h6 small,
+h4 .small,
+.h4 .small,
+h5 .small,
+.h5 .small,
+h6 .small,
+.h6 .small {
+ font-size: 75%;
+}
+h1,
+.h1 {
+ font-size: 36px;
+}
+h2,
+.h2 {
+ font-size: 30px;
+}
+h3,
+.h3 {
+ font-size: 24px;
+}
+h4,
+.h4 {
+ font-size: 18px;
+}
+h5,
+.h5 {
+ font-size: 14px;
+}
+h6,
+.h6 {
+ font-size: 12px;
+}
+p {
+ margin: 0 0 10px;
+}
+.lead {
+ margin-bottom: 20px;
+ font-size: 16px;
+ font-weight: 300;
+ line-height: 1.4;
+}
+@media (min-width: 768px) {
+ .lead {
+ font-size: 21px;
+ }
+}
+small,
+.small {
+ font-size: 85%;
+}
+mark,
+.mark {
+ padding: .2em;
+ background-color: #fcf8e3;
+}
+.text-left {
+ text-align: left;
+}
+.text-right {
+ text-align: right;
+}
+.text-center {
+ text-align: center;
+}
+.text-justify {
+ text-align: justify;
+}
+.text-nowrap {
+ white-space: nowrap;
+}
+.text-lowercase {
+ text-transform: lowercase;
+}
+.text-uppercase {
+ text-transform: uppercase;
+}
+.text-capitalize {
+ text-transform: capitalize;
+}
+.text-muted {
+ color: #777;
+}
+.text-primary {
+ color: #337ab7;
+}
+a.text-primary:hover,
+a.text-primary:focus {
+ color: #286090;
+}
+.text-success {
+ color: #3c763d;
+}
+a.text-success:hover,
+a.text-success:focus {
+ color: #2b542c;
+}
+.text-info {
+ color: #31708f;
+}
+a.text-info:hover,
+a.text-info:focus {
+ color: #245269;
+}
+.text-warning {
+ color: #8a6d3b;
+}
+a.text-warning:hover,
+a.text-warning:focus {
+ color: #66512c;
+}
+.text-danger {
+ color: #a94442;
+}
+a.text-danger:hover,
+a.text-danger:focus {
+ color: #843534;
+}
+.bg-primary {
+ color: #fff;
+ background-color: #337ab7;
+}
+a.bg-primary:hover,
+a.bg-primary:focus {
+ background-color: #286090;
+}
+.bg-success {
+ background-color: #dff0d8;
+}
+a.bg-success:hover,
+a.bg-success:focus {
+ background-color: #c1e2b3;
+}
+.bg-info {
+ background-color: #d9edf7;
+}
+a.bg-info:hover,
+a.bg-info:focus {
+ background-color: #afd9ee;
+}
+.bg-warning {
+ background-color: #fcf8e3;
+}
+a.bg-warning:hover,
+a.bg-warning:focus {
+ background-color: #f7ecb5;
+}
+.bg-danger {
+ background-color: #f2dede;
+}
+a.bg-danger:hover,
+a.bg-danger:focus {
+ background-color: #e4b9b9;
+}
+.page-header {
+ padding-bottom: 9px;
+ margin: 40px 0 20px;
+ border-bottom: 1px solid #eee;
+}
+ul,
+ol {
+ margin-top: 0;
+ margin-bottom: 10px;
+}
+ul ul,
+ol ul,
+ul ol,
+ol ol {
+ margin-bottom: 0;
+}
+.list-unstyled {
+ padding-left: 0;
+ list-style: none;
+}
+.list-inline {
+ padding-left: 0;
+ margin-left: -5px;
+ list-style: none;
+}
+.list-inline > li {
+ display: inline-block;
+ padding-right: 5px;
+ padding-left: 5px;
+}
+dl {
+ margin-top: 0;
+ margin-bottom: 20px;
+}
+dt,
+dd {
+ line-height: 1.42857143;
+}
+dt {
+ font-weight: bold;
+}
+dd {
+ margin-left: 0;
+}
+@media (min-width: 768px) {
+ .dl-horizontal dt {
+ float: left;
+ width: 160px;
+ overflow: hidden;
+ clear: left;
+ text-align: right;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+ .dl-horizontal dd {
+ margin-left: 180px;
+ }
+}
+abbr[title],
+abbr[data-original-title] {
+ cursor: help;
+ border-bottom: 1px dotted #777;
+}
+.initialism {
+ font-size: 90%;
+ text-transform: uppercase;
+}
+blockquote {
+ padding: 10px 20px;
+ margin: 0 0 20px;
+ font-size: 17.5px;
+ border-left: 5px solid #eee;
+}
+blockquote p:last-child,
+blockquote ul:last-child,
+blockquote ol:last-child {
+ margin-bottom: 0;
+}
+blockquote footer,
+blockquote small,
+blockquote .small {
+ display: block;
+ font-size: 80%;
+ line-height: 1.42857143;
+ color: #777;
+}
+blockquote footer:before,
+blockquote small:before,
+blockquote .small:before {
+ content: '\2014 \00A0';
+}
+.blockquote-reverse,
+blockquote.pull-right {
+ padding-right: 15px;
+ padding-left: 0;
+ text-align: right;
+ border-right: 5px solid #eee;
+ border-left: 0;
+}
+.blockquote-reverse footer:before,
+blockquote.pull-right footer:before,
+.blockquote-reverse small:before,
+blockquote.pull-right small:before,
+.blockquote-reverse .small:before,
+blockquote.pull-right .small:before {
+ content: '';
+}
+.blockquote-reverse footer:after,
+blockquote.pull-right footer:after,
+.blockquote-reverse small:after,
+blockquote.pull-right small:after,
+.blockquote-reverse .small:after,
+blockquote.pull-right .small:after {
+ content: '\00A0 \2014';
+}
+address {
+ margin-bottom: 20px;
+ font-style: normal;
+ line-height: 1.42857143;
+}
+code,
+kbd,
+pre,
+samp {
+ font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+code {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: #c7254e;
+ background-color: #f9f2f4;
+ border-radius: 4px;
+}
+kbd {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: #fff;
+ background-color: #333;
+ border-radius: 3px;
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
+}
+kbd kbd {
+ padding: 0;
+ font-size: 100%;
+ font-weight: bold;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+pre {
+ display: block;
+ padding: 9.5px;
+ margin: 0 0 10px;
+ font-size: 13px;
+ line-height: 1.42857143;
+ color: #333;
+ word-break: break-all;
+ word-wrap: break-word;
+ background-color: #f5f5f5;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+}
+pre code {
+ padding: 0;
+ font-size: inherit;
+ color: inherit;
+ white-space: pre-wrap;
+ background-color: transparent;
+ border-radius: 0;
+}
+.pre-scrollable {
+ max-height: 340px;
+ overflow-y: scroll;
+}
+.container {
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-right: auto;
+ margin-left: auto;
+}
+@media (min-width: 768px) {
+ .container {
+ width: 750px;
+ }
+}
+@media (min-width: 992px) {
+ .container {
+ width: 970px;
+ }
+}
+@media (min-width: 1200px) {
+ .container {
+ width: 1170px;
+ }
+}
+.container-fluid {
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-right: auto;
+ margin-left: auto;
+}
+.row {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
+ position: relative;
+ min-height: 1px;
+ padding-right: 15px;
+ padding-left: 15px;
+}
+.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
+ float: left;
+}
+.col-xs-12 {
+ width: 100%;
+}
+.col-xs-11 {
+ width: 91.66666667%;
+}
+.col-xs-10 {
+ width: 83.33333333%;
+}
+.col-xs-9 {
+ width: 75%;
+}
+.col-xs-8 {
+ width: 66.66666667%;
+}
+.col-xs-7 {
+ width: 58.33333333%;
+}
+.col-xs-6 {
+ width: 50%;
+}
+.col-xs-5 {
+ width: 41.66666667%;
+}
+.col-xs-4 {
+ width: 33.33333333%;
+}
+.col-xs-3 {
+ width: 25%;
+}
+.col-xs-2 {
+ width: 16.66666667%;
+}
+.col-xs-1 {
+ width: 8.33333333%;
+}
+.col-xs-pull-12 {
+ right: 100%;
+}
+.col-xs-pull-11 {
+ right: 91.66666667%;
+}
+.col-xs-pull-10 {
+ right: 83.33333333%;
+}
+.col-xs-pull-9 {
+ right: 75%;
+}
+.col-xs-pull-8 {
+ right: 66.66666667%;
+}
+.col-xs-pull-7 {
+ right: 58.33333333%;
+}
+.col-xs-pull-6 {
+ right: 50%;
+}
+.col-xs-pull-5 {
+ right: 41.66666667%;
+}
+.col-xs-pull-4 {
+ right: 33.33333333%;
+}
+.col-xs-pull-3 {
+ right: 25%;
+}
+.col-xs-pull-2 {
+ right: 16.66666667%;
+}
+.col-xs-pull-1 {
+ right: 8.33333333%;
+}
+.col-xs-pull-0 {
+ right: auto;
+}
+.col-xs-push-12 {
+ left: 100%;
+}
+.col-xs-push-11 {
+ left: 91.66666667%;
+}
+.col-xs-push-10 {
+ left: 83.33333333%;
+}
+.col-xs-push-9 {
+ left: 75%;
+}
+.col-xs-push-8 {
+ left: 66.66666667%;
+}
+.col-xs-push-7 {
+ left: 58.33333333%;
+}
+.col-xs-push-6 {
+ left: 50%;
+}
+.col-xs-push-5 {
+ left: 41.66666667%;
+}
+.col-xs-push-4 {
+ left: 33.33333333%;
+}
+.col-xs-push-3 {
+ left: 25%;
+}
+.col-xs-push-2 {
+ left: 16.66666667%;
+}
+.col-xs-push-1 {
+ left: 8.33333333%;
+}
+.col-xs-push-0 {
+ left: auto;
+}
+.col-xs-offset-12 {
+ margin-left: 100%;
+}
+.col-xs-offset-11 {
+ margin-left: 91.66666667%;
+}
+.col-xs-offset-10 {
+ margin-left: 83.33333333%;
+}
+.col-xs-offset-9 {
+ margin-left: 75%;
+}
+.col-xs-offset-8 {
+ margin-left: 66.66666667%;
+}
+.col-xs-offset-7 {
+ margin-left: 58.33333333%;
+}
+.col-xs-offset-6 {
+ margin-left: 50%;
+}
+.col-xs-offset-5 {
+ margin-left: 41.66666667%;
+}
+.col-xs-offset-4 {
+ margin-left: 33.33333333%;
+}
+.col-xs-offset-3 {
+ margin-left: 25%;
+}
+.col-xs-offset-2 {
+ margin-left: 16.66666667%;
+}
+.col-xs-offset-1 {
+ margin-left: 8.33333333%;
+}
+.col-xs-offset-0 {
+ margin-left: 0;
+}
+@media (min-width: 768px) {
+ .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
+ float: left;
+ }
+ .col-sm-12 {
+ width: 100%;
+ }
+ .col-sm-11 {
+ width: 91.66666667%;
+ }
+ .col-sm-10 {
+ width: 83.33333333%;
+ }
+ .col-sm-9 {
+ width: 75%;
+ }
+ .col-sm-8 {
+ width: 66.66666667%;
+ }
+ .col-sm-7 {
+ width: 58.33333333%;
+ }
+ .col-sm-6 {
+ width: 50%;
+ }
+ .col-sm-5 {
+ width: 41.66666667%;
+ }
+ .col-sm-4 {
+ width: 33.33333333%;
+ }
+ .col-sm-3 {
+ width: 25%;
+ }
+ .col-sm-2 {
+ width: 16.66666667%;
+ }
+ .col-sm-1 {
+ width: 8.33333333%;
+ }
+ .col-sm-pull-12 {
+ right: 100%;
+ }
+ .col-sm-pull-11 {
+ right: 91.66666667%;
+ }
+ .col-sm-pull-10 {
+ right: 83.33333333%;
+ }
+ .col-sm-pull-9 {
+ right: 75%;
+ }
+ .col-sm-pull-8 {
+ right: 66.66666667%;
+ }
+ .col-sm-pull-7 {
+ right: 58.33333333%;
+ }
+ .col-sm-pull-6 {
+ right: 50%;
+ }
+ .col-sm-pull-5 {
+ right: 41.66666667%;
+ }
+ .col-sm-pull-4 {
+ right: 33.33333333%;
+ }
+ .col-sm-pull-3 {
+ right: 25%;
+ }
+ .col-sm-pull-2 {
+ right: 16.66666667%;
+ }
+ .col-sm-pull-1 {
+ right: 8.33333333%;
+ }
+ .col-sm-pull-0 {
+ right: auto;
+ }
+ .col-sm-push-12 {
+ left: 100%;
+ }
+ .col-sm-push-11 {
+ left: 91.66666667%;
+ }
+ .col-sm-push-10 {
+ left: 83.33333333%;
+ }
+ .col-sm-push-9 {
+ left: 75%;
+ }
+ .col-sm-push-8 {
+ left: 66.66666667%;
+ }
+ .col-sm-push-7 {
+ left: 58.33333333%;
+ }
+ .col-sm-push-6 {
+ left: 50%;
+ }
+ .col-sm-push-5 {
+ left: 41.66666667%;
+ }
+ .col-sm-push-4 {
+ left: 33.33333333%;
+ }
+ .col-sm-push-3 {
+ left: 25%;
+ }
+ .col-sm-push-2 {
+ left: 16.66666667%;
+ }
+ .col-sm-push-1 {
+ left: 8.33333333%;
+ }
+ .col-sm-push-0 {
+ left: auto;
+ }
+ .col-sm-offset-12 {
+ margin-left: 100%;
+ }
+ .col-sm-offset-11 {
+ margin-left: 91.66666667%;
+ }
+ .col-sm-offset-10 {
+ margin-left: 83.33333333%;
+ }
+ .col-sm-offset-9 {
+ margin-left: 75%;
+ }
+ .col-sm-offset-8 {
+ margin-left: 66.66666667%;
+ }
+ .col-sm-offset-7 {
+ margin-left: 58.33333333%;
+ }
+ .col-sm-offset-6 {
+ margin-left: 50%;
+ }
+ .col-sm-offset-5 {
+ margin-left: 41.66666667%;
+ }
+ .col-sm-offset-4 {
+ margin-left: 33.33333333%;
+ }
+ .col-sm-offset-3 {
+ margin-left: 25%;
+ }
+ .col-sm-offset-2 {
+ margin-left: 16.66666667%;
+ }
+ .col-sm-offset-1 {
+ margin-left: 8.33333333%;
+ }
+ .col-sm-offset-0 {
+ margin-left: 0;
+ }
+}
+@media (min-width: 992px) {
+ .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
+ float: left;
+ }
+ .col-md-12 {
+ width: 100%;
+ }
+ .col-md-11 {
+ width: 91.66666667%;
+ }
+ .col-md-10 {
+ width: 83.33333333%;
+ }
+ .col-md-9 {
+ width: 75%;
+ }
+ .col-md-8 {
+ width: 66.66666667%;
+ }
+ .col-md-7 {
+ width: 58.33333333%;
+ }
+ .col-md-6 {
+ width: 50%;
+ }
+ .col-md-5 {
+ width: 41.66666667%;
+ }
+ .col-md-4 {
+ width: 33.33333333%;
+ }
+ .col-md-3 {
+ width: 25%;
+ }
+ .col-md-2 {
+ width: 16.66666667%;
+ }
+ .col-md-1 {
+ width: 8.33333333%;
+ }
+ .col-md-pull-12 {
+ right: 100%;
+ }
+ .col-md-pull-11 {
+ right: 91.66666667%;
+ }
+ .col-md-pull-10 {
+ right: 83.33333333%;
+ }
+ .col-md-pull-9 {
+ right: 75%;
+ }
+ .col-md-pull-8 {
+ right: 66.66666667%;
+ }
+ .col-md-pull-7 {
+ right: 58.33333333%;
+ }
+ .col-md-pull-6 {
+ right: 50%;
+ }
+ .col-md-pull-5 {
+ right: 41.66666667%;
+ }
+ .col-md-pull-4 {
+ right: 33.33333333%;
+ }
+ .col-md-pull-3 {
+ right: 25%;
+ }
+ .col-md-pull-2 {
+ right: 16.66666667%;
+ }
+ .col-md-pull-1 {
+ right: 8.33333333%;
+ }
+ .col-md-pull-0 {
+ right: auto;
+ }
+ .col-md-push-12 {
+ left: 100%;
+ }
+ .col-md-push-11 {
+ left: 91.66666667%;
+ }
+ .col-md-push-10 {
+ left: 83.33333333%;
+ }
+ .col-md-push-9 {
+ left: 75%;
+ }
+ .col-md-push-8 {
+ left: 66.66666667%;
+ }
+ .col-md-push-7 {
+ left: 58.33333333%;
+ }
+ .col-md-push-6 {
+ left: 50%;
+ }
+ .col-md-push-5 {
+ left: 41.66666667%;
+ }
+ .col-md-push-4 {
+ left: 33.33333333%;
+ }
+ .col-md-push-3 {
+ left: 25%;
+ }
+ .col-md-push-2 {
+ left: 16.66666667%;
+ }
+ .col-md-push-1 {
+ left: 8.33333333%;
+ }
+ .col-md-push-0 {
+ left: auto;
+ }
+ .col-md-offset-12 {
+ margin-left: 100%;
+ }
+ .col-md-offset-11 {
+ margin-left: 91.66666667%;
+ }
+ .col-md-offset-10 {
+ margin-left: 83.33333333%;
+ }
+ .col-md-offset-9 {
+ margin-left: 75%;
+ }
+ .col-md-offset-8 {
+ margin-left: 66.66666667%;
+ }
+ .col-md-offset-7 {
+ margin-left: 58.33333333%;
+ }
+ .col-md-offset-6 {
+ margin-left: 50%;
+ }
+ .col-md-offset-5 {
+ margin-left: 41.66666667%;
+ }
+ .col-md-offset-4 {
+ margin-left: 33.33333333%;
+ }
+ .col-md-offset-3 {
+ margin-left: 25%;
+ }
+ .col-md-offset-2 {
+ margin-left: 16.66666667%;
+ }
+ .col-md-offset-1 {
+ margin-left: 8.33333333%;
+ }
+ .col-md-offset-0 {
+ margin-left: 0;
+ }
+}
+@media (min-width: 1200px) {
+ .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
+ float: left;
+ }
+ .col-lg-12 {
+ width: 100%;
+ }
+ .col-lg-11 {
+ width: 91.66666667%;
+ }
+ .col-lg-10 {
+ width: 83.33333333%;
+ }
+ .col-lg-9 {
+ width: 75%;
+ }
+ .col-lg-8 {
+ width: 66.66666667%;
+ }
+ .col-lg-7 {
+ width: 58.33333333%;
+ }
+ .col-lg-6 {
+ width: 50%;
+ }
+ .col-lg-5 {
+ width: 41.66666667%;
+ }
+ .col-lg-4 {
+ width: 33.33333333%;
+ }
+ .col-lg-3 {
+ width: 25%;
+ }
+ .col-lg-2 {
+ width: 16.66666667%;
+ }
+ .col-lg-1 {
+ width: 8.33333333%;
+ }
+ .col-lg-pull-12 {
+ right: 100%;
+ }
+ .col-lg-pull-11 {
+ right: 91.66666667%;
+ }
+ .col-lg-pull-10 {
+ right: 83.33333333%;
+ }
+ .col-lg-pull-9 {
+ right: 75%;
+ }
+ .col-lg-pull-8 {
+ right: 66.66666667%;
+ }
+ .col-lg-pull-7 {
+ right: 58.33333333%;
+ }
+ .col-lg-pull-6 {
+ right: 50%;
+ }
+ .col-lg-pull-5 {
+ right: 41.66666667%;
+ }
+ .col-lg-pull-4 {
+ right: 33.33333333%;
+ }
+ .col-lg-pull-3 {
+ right: 25%;
+ }
+ .col-lg-pull-2 {
+ right: 16.66666667%;
+ }
+ .col-lg-pull-1 {
+ right: 8.33333333%;
+ }
+ .col-lg-pull-0 {
+ right: auto;
+ }
+ .col-lg-push-12 {
+ left: 100%;
+ }
+ .col-lg-push-11 {
+ left: 91.66666667%;
+ }
+ .col-lg-push-10 {
+ left: 83.33333333%;
+ }
+ .col-lg-push-9 {
+ left: 75%;
+ }
+ .col-lg-push-8 {
+ left: 66.66666667%;
+ }
+ .col-lg-push-7 {
+ left: 58.33333333%;
+ }
+ .col-lg-push-6 {
+ left: 50%;
+ }
+ .col-lg-push-5 {
+ left: 41.66666667%;
+ }
+ .col-lg-push-4 {
+ left: 33.33333333%;
+ }
+ .col-lg-push-3 {
+ left: 25%;
+ }
+ .col-lg-push-2 {
+ left: 16.66666667%;
+ }
+ .col-lg-push-1 {
+ left: 8.33333333%;
+ }
+ .col-lg-push-0 {
+ left: auto;
+ }
+ .col-lg-offset-12 {
+ margin-left: 100%;
+ }
+ .col-lg-offset-11 {
+ margin-left: 91.66666667%;
+ }
+ .col-lg-offset-10 {
+ margin-left: 83.33333333%;
+ }
+ .col-lg-offset-9 {
+ margin-left: 75%;
+ }
+ .col-lg-offset-8 {
+ margin-left: 66.66666667%;
+ }
+ .col-lg-offset-7 {
+ margin-left: 58.33333333%;
+ }
+ .col-lg-offset-6 {
+ margin-left: 50%;
+ }
+ .col-lg-offset-5 {
+ margin-left: 41.66666667%;
+ }
+ .col-lg-offset-4 {
+ margin-left: 33.33333333%;
+ }
+ .col-lg-offset-3 {
+ margin-left: 25%;
+ }
+ .col-lg-offset-2 {
+ margin-left: 16.66666667%;
+ }
+ .col-lg-offset-1 {
+ margin-left: 8.33333333%;
+ }
+ .col-lg-offset-0 {
+ margin-left: 0;
+ }
+}
+table {
+ background-color: transparent;
+}
+caption {
+ padding-top: 8px;
+ padding-bottom: 8px;
+ color: #777;
+ text-align: left;
+}
+th {
+ text-align: left;
+}
+.table {
+ width: 100%;
+ max-width: 100%;
+ margin-bottom: 20px;
+}
+.table > thead > tr > th,
+.table > tbody > tr > th,
+.table > tfoot > tr > th,
+.table > thead > tr > td,
+.table > tbody > tr > td,
+.table > tfoot > tr > td {
+ padding: 8px;
+ line-height: 1.42857143;
+ vertical-align: top;
+ border-top: 1px solid #ddd;
+}
+.table > thead > tr > th {
+ vertical-align: bottom;
+ border-bottom: 2px solid #ddd;
+}
+.table > caption + thead > tr:first-child > th,
+.table > colgroup + thead > tr:first-child > th,
+.table > thead:first-child > tr:first-child > th,
+.table > caption + thead > tr:first-child > td,
+.table > colgroup + thead > tr:first-child > td,
+.table > thead:first-child > tr:first-child > td {
+ border-top: 0;
+}
+.table > tbody + tbody {
+ border-top: 2px solid #ddd;
+}
+.table .table {
+ background-color: #fff;
+}
+.table-condensed > thead > tr > th,
+.table-condensed > tbody > tr > th,
+.table-condensed > tfoot > tr > th,
+.table-condensed > thead > tr > td,
+.table-condensed > tbody > tr > td,
+.table-condensed > tfoot > tr > td {
+ padding: 5px;
+}
+.table-bordered {
+ border: 1px solid #ddd;
+}
+.table-bordered > thead > tr > th,
+.table-bordered > tbody > tr > th,
+.table-bordered > tfoot > tr > th,
+.table-bordered > thead > tr > td,
+.table-bordered > tbody > tr > td,
+.table-bordered > tfoot > tr > td {
+ border: 1px solid #ddd;
+}
+.table-bordered > thead > tr > th,
+.table-bordered > thead > tr > td {
+ border-bottom-width: 2px;
+}
+.table-striped > tbody > tr:nth-of-type(odd) {
+ background-color: #f9f9f9;
+}
+.table-hover > tbody > tr:hover {
+ background-color: #f5f5f5;
+}
+table col[class*="col-"] {
+ position: static;
+ display: table-column;
+ float: none;
+}
+table td[class*="col-"],
+table th[class*="col-"] {
+ position: static;
+ display: table-cell;
+ float: none;
+}
+.table > thead > tr > td.active,
+.table > tbody > tr > td.active,
+.table > tfoot > tr > td.active,
+.table > thead > tr > th.active,
+.table > tbody > tr > th.active,
+.table > tfoot > tr > th.active,
+.table > thead > tr.active > td,
+.table > tbody > tr.active > td,
+.table > tfoot > tr.active > td,
+.table > thead > tr.active > th,
+.table > tbody > tr.active > th,
+.table > tfoot > tr.active > th {
+ background-color: #f5f5f5;
+}
+.table-hover > tbody > tr > td.active:hover,
+.table-hover > tbody > tr > th.active:hover,
+.table-hover > tbody > tr.active:hover > td,
+.table-hover > tbody > tr:hover > .active,
+.table-hover > tbody > tr.active:hover > th {
+ background-color: #e8e8e8;
+}
+.table > thead > tr > td.success,
+.table > tbody > tr > td.success,
+.table > tfoot > tr > td.success,
+.table > thead > tr > th.success,
+.table > tbody > tr > th.success,
+.table > tfoot > tr > th.success,
+.table > thead > tr.success > td,
+.table > tbody > tr.success > td,
+.table > tfoot > tr.success > td,
+.table > thead > tr.success > th,
+.table > tbody > tr.success > th,
+.table > tfoot > tr.success > th {
+ background-color: #dff0d8;
+}
+.table-hover > tbody > tr > td.success:hover,
+.table-hover > tbody > tr > th.success:hover,
+.table-hover > tbody > tr.success:hover > td,
+.table-hover > tbody > tr:hover > .success,
+.table-hover > tbody > tr.success:hover > th {
+ background-color: #d0e9c6;
+}
+.table > thead > tr > td.info,
+.table > tbody > tr > td.info,
+.table > tfoot > tr > td.info,
+.table > thead > tr > th.info,
+.table > tbody > tr > th.info,
+.table > tfoot > tr > th.info,
+.table > thead > tr.info > td,
+.table > tbody > tr.info > td,
+.table > tfoot > tr.info > td,
+.table > thead > tr.info > th,
+.table > tbody > tr.info > th,
+.table > tfoot > tr.info > th {
+ background-color: #d9edf7;
+}
+.table-hover > tbody > tr > td.info:hover,
+.table-hover > tbody > tr > th.info:hover,
+.table-hover > tbody > tr.info:hover > td,
+.table-hover > tbody > tr:hover > .info,
+.table-hover > tbody > tr.info:hover > th {
+ background-color: #c4e3f3;
+}
+.table > thead > tr > td.warning,
+.table > tbody > tr > td.warning,
+.table > tfoot > tr > td.warning,
+.table > thead > tr > th.warning,
+.table > tbody > tr > th.warning,
+.table > tfoot > tr > th.warning,
+.table > thead > tr.warning > td,
+.table > tbody > tr.warning > td,
+.table > tfoot > tr.warning > td,
+.table > thead > tr.warning > th,
+.table > tbody > tr.warning > th,
+.table > tfoot > tr.warning > th {
+ background-color: #fcf8e3;
+}
+.table-hover > tbody > tr > td.warning:hover,
+.table-hover > tbody > tr > th.warning:hover,
+.table-hover > tbody > tr.warning:hover > td,
+.table-hover > tbody > tr:hover > .warning,
+.table-hover > tbody > tr.warning:hover > th {
+ background-color: #faf2cc;
+}
+.table > thead > tr > td.danger,
+.table > tbody > tr > td.danger,
+.table > tfoot > tr > td.danger,
+.table > thead > tr > th.danger,
+.table > tbody > tr > th.danger,
+.table > tfoot > tr > th.danger,
+.table > thead > tr.danger > td,
+.table > tbody > tr.danger > td,
+.table > tfoot > tr.danger > td,
+.table > thead > tr.danger > th,
+.table > tbody > tr.danger > th,
+.table > tfoot > tr.danger > th {
+ background-color: #f2dede;
+}
+.table-hover > tbody > tr > td.danger:hover,
+.table-hover > tbody > tr > th.danger:hover,
+.table-hover > tbody > tr.danger:hover > td,
+.table-hover > tbody > tr:hover > .danger,
+.table-hover > tbody > tr.danger:hover > th {
+ background-color: #ebcccc;
+}
+.table-responsive {
+ min-height: .01%;
+ overflow-x: auto;
+}
+@media screen and (max-width: 767px) {
+ .table-responsive {
+ width: 100%;
+ margin-bottom: 15px;
+ overflow-y: hidden;
+ -ms-overflow-style: -ms-autohiding-scrollbar;
+ border: 1px solid #ddd;
+ }
+ .table-responsive > .table {
+ margin-bottom: 0;
+ }
+ .table-responsive > .table > thead > tr > th,
+ .table-responsive > .table > tbody > tr > th,
+ .table-responsive > .table > tfoot > tr > th,
+ .table-responsive > .table > thead > tr > td,
+ .table-responsive > .table > tbody > tr > td,
+ .table-responsive > .table > tfoot > tr > td {
+ white-space: nowrap;
+ }
+ .table-responsive > .table-bordered {
+ border: 0;
+ }
+ .table-responsive > .table-bordered > thead > tr > th:first-child,
+ .table-responsive > .table-bordered > tbody > tr > th:first-child,
+ .table-responsive > .table-bordered > tfoot > tr > th:first-child,
+ .table-responsive > .table-bordered > thead > tr > td:first-child,
+ .table-responsive > .table-bordered > tbody > tr > td:first-child,
+ .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+ border-left: 0;
+ }
+ .table-responsive > .table-bordered > thead > tr > th:last-child,
+ .table-responsive > .table-bordered > tbody > tr > th:last-child,
+ .table-responsive > .table-bordered > tfoot > tr > th:last-child,
+ .table-responsive > .table-bordered > thead > tr > td:last-child,
+ .table-responsive > .table-bordered > tbody > tr > td:last-child,
+ .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+ border-right: 0;
+ }
+ .table-responsive > .table-bordered > tbody > tr:last-child > th,
+ .table-responsive > .table-bordered > tfoot > tr:last-child > th,
+ .table-responsive > .table-bordered > tbody > tr:last-child > td,
+ .table-responsive > .table-bordered > tfoot > tr:last-child > td {
+ border-bottom: 0;
+ }
+}
+fieldset {
+ min-width: 0;
+ padding: 0;
+ margin: 0;
+ border: 0;
+}
+legend {
+ display: block;
+ width: 100%;
+ padding: 0;
+ margin-bottom: 20px;
+ font-size: 21px;
+ line-height: inherit;
+ color: #333;
+ border: 0;
+ border-bottom: 1px solid #e5e5e5;
+}
+label {
+ display: inline-block;
+ max-width: 100%;
+ margin-bottom: 5px;
+ font-weight: bold;
+}
+input[type="search"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+input[type="radio"],
+input[type="checkbox"] {
+ margin: 4px 0 0;
+ margin-top: 1px \9;
+ line-height: normal;
+}
+input[type="file"] {
+ display: block;
+}
+input[type="range"] {
+ display: block;
+ width: 100%;
+}
+select[multiple],
+select[size] {
+ height: auto;
+}
+input[type="file"]:focus,
+input[type="radio"]:focus,
+input[type="checkbox"]:focus {
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+output {
+ display: block;
+ padding-top: 7px;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #555;
+}
+.form-control {
+ display: block;
+ width: 100%;
+ height: 34px;
+ padding: 6px 12px;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #555;
+ background-color: #fff;
+ background-image: none;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
+ -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+ transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+}
+.form-control:focus {
+ border-color: #66afe9;
+ outline: 0;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
+ box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
+}
+.form-control::-moz-placeholder {
+ color: #999;
+ opacity: 1;
+}
+.form-control:-ms-input-placeholder {
+ color: #999;
+}
+.form-control::-webkit-input-placeholder {
+ color: #999;
+}
+.form-control::-ms-expand {
+ background-color: transparent;
+ border: 0;
+}
+.form-control[disabled],
+.form-control[readonly],
+fieldset[disabled] .form-control {
+ background-color: #eee;
+ opacity: 1;
+}
+.form-control[disabled],
+fieldset[disabled] .form-control {
+ cursor: not-allowed;
+}
+textarea.form-control {
+ height: auto;
+}
+input[type="search"] {
+ -webkit-appearance: none;
+}
+@media screen and (-webkit-min-device-pixel-ratio: 0) {
+ input[type="date"].form-control,
+ input[type="time"].form-control,
+ input[type="datetime-local"].form-control,
+ input[type="month"].form-control {
+ line-height: 34px;
+ }
+ input[type="date"].input-sm,
+ input[type="time"].input-sm,
+ input[type="datetime-local"].input-sm,
+ input[type="month"].input-sm,
+ .input-group-sm input[type="date"],
+ .input-group-sm input[type="time"],
+ .input-group-sm input[type="datetime-local"],
+ .input-group-sm input[type="month"] {
+ line-height: 30px;
+ }
+ input[type="date"].input-lg,
+ input[type="time"].input-lg,
+ input[type="datetime-local"].input-lg,
+ input[type="month"].input-lg,
+ .input-group-lg input[type="date"],
+ .input-group-lg input[type="time"],
+ .input-group-lg input[type="datetime-local"],
+ .input-group-lg input[type="month"] {
+ line-height: 46px;
+ }
+}
+.form-group {
+ margin-bottom: 15px;
+}
+.radio,
+.checkbox {
+ position: relative;
+ display: block;
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+.radio label,
+.checkbox label {
+ min-height: 20px;
+ padding-left: 20px;
+ margin-bottom: 0;
+ font-weight: normal;
+ cursor: pointer;
+}
+.radio input[type="radio"],
+.radio-inline input[type="radio"],
+.checkbox input[type="checkbox"],
+.checkbox-inline input[type="checkbox"] {
+ position: absolute;
+ margin-top: 4px \9;
+ margin-left: -20px;
+}
+.radio + .radio,
+.checkbox + .checkbox {
+ margin-top: -5px;
+}
+.radio-inline,
+.checkbox-inline {
+ position: relative;
+ display: inline-block;
+ padding-left: 20px;
+ margin-bottom: 0;
+ font-weight: normal;
+ vertical-align: middle;
+ cursor: pointer;
+}
+.radio-inline + .radio-inline,
+.checkbox-inline + .checkbox-inline {
+ margin-top: 0;
+ margin-left: 10px;
+}
+input[type="radio"][disabled],
+input[type="checkbox"][disabled],
+input[type="radio"].disabled,
+input[type="checkbox"].disabled,
+fieldset[disabled] input[type="radio"],
+fieldset[disabled] input[type="checkbox"] {
+ cursor: not-allowed;
+}
+.radio-inline.disabled,
+.checkbox-inline.disabled,
+fieldset[disabled] .radio-inline,
+fieldset[disabled] .checkbox-inline {
+ cursor: not-allowed;
+}
+.radio.disabled label,
+.checkbox.disabled label,
+fieldset[disabled] .radio label,
+fieldset[disabled] .checkbox label {
+ cursor: not-allowed;
+}
+.form-control-static {
+ min-height: 34px;
+ padding-top: 7px;
+ padding-bottom: 7px;
+ margin-bottom: 0;
+}
+.form-control-static.input-lg,
+.form-control-static.input-sm {
+ padding-right: 0;
+ padding-left: 0;
+}
+.input-sm {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+select.input-sm {
+ height: 30px;
+ line-height: 30px;
+}
+textarea.input-sm,
+select[multiple].input-sm {
+ height: auto;
+}
+.form-group-sm .form-control {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+.form-group-sm select.form-control {
+ height: 30px;
+ line-height: 30px;
+}
+.form-group-sm textarea.form-control,
+.form-group-sm select[multiple].form-control {
+ height: auto;
+}
+.form-group-sm .form-control-static {
+ height: 30px;
+ min-height: 32px;
+ padding: 6px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+}
+.input-lg {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+ border-radius: 6px;
+}
+select.input-lg {
+ height: 46px;
+ line-height: 46px;
+}
+textarea.input-lg,
+select[multiple].input-lg {
+ height: auto;
+}
+.form-group-lg .form-control {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+ border-radius: 6px;
+}
+.form-group-lg select.form-control {
+ height: 46px;
+ line-height: 46px;
+}
+.form-group-lg textarea.form-control,
+.form-group-lg select[multiple].form-control {
+ height: auto;
+}
+.form-group-lg .form-control-static {
+ height: 46px;
+ min-height: 38px;
+ padding: 11px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+}
+.has-feedback {
+ position: relative;
+}
+.has-feedback .form-control {
+ padding-right: 42.5px;
+}
+.form-control-feedback {
+ position: absolute;
+ top: 0;
+ right: 0;
+ z-index: 2;
+ display: block;
+ width: 34px;
+ height: 34px;
+ line-height: 34px;
+ text-align: center;
+ pointer-events: none;
+}
+.input-lg + .form-control-feedback,
+.input-group-lg + .form-control-feedback,
+.form-group-lg .form-control + .form-control-feedback {
+ width: 46px;
+ height: 46px;
+ line-height: 46px;
+}
+.input-sm + .form-control-feedback,
+.input-group-sm + .form-control-feedback,
+.form-group-sm .form-control + .form-control-feedback {
+ width: 30px;
+ height: 30px;
+ line-height: 30px;
+}
+.has-success .help-block,
+.has-success .control-label,
+.has-success .radio,
+.has-success .checkbox,
+.has-success .radio-inline,
+.has-success .checkbox-inline,
+.has-success.radio label,
+.has-success.checkbox label,
+.has-success.radio-inline label,
+.has-success.checkbox-inline label {
+ color: #3c763d;
+}
+.has-success .form-control {
+ border-color: #3c763d;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+.has-success .form-control:focus {
+ border-color: #2b542c;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
+}
+.has-success .input-group-addon {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #3c763d;
+}
+.has-success .form-control-feedback {
+ color: #3c763d;
+}
+.has-warning .help-block,
+.has-warning .control-label,
+.has-warning .radio,
+.has-warning .checkbox,
+.has-warning .radio-inline,
+.has-warning .checkbox-inline,
+.has-warning.radio label,
+.has-warning.checkbox label,
+.has-warning.radio-inline label,
+.has-warning.checkbox-inline label {
+ color: #8a6d3b;
+}
+.has-warning .form-control {
+ border-color: #8a6d3b;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+.has-warning .form-control:focus {
+ border-color: #66512c;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
+}
+.has-warning .input-group-addon {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #8a6d3b;
+}
+.has-warning .form-control-feedback {
+ color: #8a6d3b;
+}
+.has-error .help-block,
+.has-error .control-label,
+.has-error .radio,
+.has-error .checkbox,
+.has-error .radio-inline,
+.has-error .checkbox-inline,
+.has-error.radio label,
+.has-error.checkbox label,
+.has-error.radio-inline label,
+.has-error.checkbox-inline label {
+ color: #a94442;
+}
+.has-error .form-control {
+ border-color: #a94442;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+.has-error .form-control:focus {
+ border-color: #843534;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
+}
+.has-error .input-group-addon {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #a94442;
+}
+.has-error .form-control-feedback {
+ color: #a94442;
+}
+.has-feedback label ~ .form-control-feedback {
+ top: 25px;
+}
+.has-feedback label.sr-only ~ .form-control-feedback {
+ top: 0;
+}
+.help-block {
+ display: block;
+ margin-top: 5px;
+ margin-bottom: 10px;
+ color: #737373;
+}
+@media (min-width: 768px) {
+ .form-inline .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .form-inline .form-control {
+ display: inline-block;
+ width: auto;
+ vertical-align: middle;
+ }
+ .form-inline .form-control-static {
+ display: inline-block;
+ }
+ .form-inline .input-group {
+ display: inline-table;
+ vertical-align: middle;
+ }
+ .form-inline .input-group .input-group-addon,
+ .form-inline .input-group .input-group-btn,
+ .form-inline .input-group .form-control {
+ width: auto;
+ }
+ .form-inline .input-group > .form-control {
+ width: 100%;
+ }
+ .form-inline .control-label {
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .form-inline .radio,
+ .form-inline .checkbox {
+ display: inline-block;
+ margin-top: 0;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .form-inline .radio label,
+ .form-inline .checkbox label {
+ padding-left: 0;
+ }
+ .form-inline .radio input[type="radio"],
+ .form-inline .checkbox input[type="checkbox"] {
+ position: relative;
+ margin-left: 0;
+ }
+ .form-inline .has-feedback .form-control-feedback {
+ top: 0;
+ }
+}
+.form-horizontal .radio,
+.form-horizontal .checkbox,
+.form-horizontal .radio-inline,
+.form-horizontal .checkbox-inline {
+ padding-top: 7px;
+ margin-top: 0;
+ margin-bottom: 0;
+}
+.form-horizontal .radio,
+.form-horizontal .checkbox {
+ min-height: 27px;
+}
+.form-horizontal .form-group {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+@media (min-width: 768px) {
+ .form-horizontal .control-label {
+ padding-top: 7px;
+ margin-bottom: 0;
+ text-align: right;
+ }
+}
+.form-horizontal .has-feedback .form-control-feedback {
+ right: 15px;
+}
+@media (min-width: 768px) {
+ .form-horizontal .form-group-lg .control-label {
+ padding-top: 11px;
+ font-size: 18px;
+ }
+}
+@media (min-width: 768px) {
+ .form-horizontal .form-group-sm .control-label {
+ padding-top: 6px;
+ font-size: 12px;
+ }
+}
+.btn {
+ display: inline-block;
+ padding: 6px 12px;
+ margin-bottom: 0;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 1.42857143;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: middle;
+ -ms-touch-action: manipulation;
+ touch-action: manipulation;
+ cursor: pointer;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ background-image: none;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+.btn:focus,
+.btn:active:focus,
+.btn.active:focus,
+.btn.focus,
+.btn:active.focus,
+.btn.active.focus {
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+.btn:hover,
+.btn:focus,
+.btn.focus {
+ color: #333;
+ text-decoration: none;
+}
+.btn:active,
+.btn.active {
+ background-image: none;
+ outline: 0;
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+}
+.btn.disabled,
+.btn[disabled],
+fieldset[disabled] .btn {
+ cursor: not-allowed;
+ filter: alpha(opacity=65);
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ opacity: .65;
+}
+a.btn.disabled,
+fieldset[disabled] a.btn {
+ pointer-events: none;
+}
+.btn-default {
+ color: #333;
+ background-color: #fff;
+ border-color: #ccc;
+}
+.btn-default:focus,
+.btn-default.focus {
+ color: #333;
+ background-color: #e6e6e6;
+ border-color: #8c8c8c;
+}
+.btn-default:hover {
+ color: #333;
+ background-color: #e6e6e6;
+ border-color: #adadad;
+}
+.btn-default:active,
+.btn-default.active,
+.open > .dropdown-toggle.btn-default {
+ color: #333;
+ background-color: #e6e6e6;
+ border-color: #adadad;
+}
+.btn-default:active:hover,
+.btn-default.active:hover,
+.open > .dropdown-toggle.btn-default:hover,
+.btn-default:active:focus,
+.btn-default.active:focus,
+.open > .dropdown-toggle.btn-default:focus,
+.btn-default:active.focus,
+.btn-default.active.focus,
+.open > .dropdown-toggle.btn-default.focus {
+ color: #333;
+ background-color: #d4d4d4;
+ border-color: #8c8c8c;
+}
+.btn-default:active,
+.btn-default.active,
+.open > .dropdown-toggle.btn-default {
+ background-image: none;
+}
+.btn-default.disabled:hover,
+.btn-default[disabled]:hover,
+fieldset[disabled] .btn-default:hover,
+.btn-default.disabled:focus,
+.btn-default[disabled]:focus,
+fieldset[disabled] .btn-default:focus,
+.btn-default.disabled.focus,
+.btn-default[disabled].focus,
+fieldset[disabled] .btn-default.focus {
+ background-color: #fff;
+ border-color: #ccc;
+}
+.btn-default .badge {
+ color: #fff;
+ background-color: #333;
+}
+.btn-primary {
+ color: #fff;
+ background-color: #337ab7;
+ border-color: #2e6da4;
+}
+.btn-primary:focus,
+.btn-primary.focus {
+ color: #fff;
+ background-color: #286090;
+ border-color: #122b40;
+}
+.btn-primary:hover {
+ color: #fff;
+ background-color: #286090;
+ border-color: #204d74;
+}
+.btn-primary:active,
+.btn-primary.active,
+.open > .dropdown-toggle.btn-primary {
+ color: #fff;
+ background-color: #286090;
+ border-color: #204d74;
+}
+.btn-primary:active:hover,
+.btn-primary.active:hover,
+.open > .dropdown-toggle.btn-primary:hover,
+.btn-primary:active:focus,
+.btn-primary.active:focus,
+.open > .dropdown-toggle.btn-primary:focus,
+.btn-primary:active.focus,
+.btn-primary.active.focus,
+.open > .dropdown-toggle.btn-primary.focus {
+ color: #fff;
+ background-color: #204d74;
+ border-color: #122b40;
+}
+.btn-primary:active,
+.btn-primary.active,
+.open > .dropdown-toggle.btn-primary {
+ background-image: none;
+}
+.btn-primary.disabled:hover,
+.btn-primary[disabled]:hover,
+fieldset[disabled] .btn-primary:hover,
+.btn-primary.disabled:focus,
+.btn-primary[disabled]:focus,
+fieldset[disabled] .btn-primary:focus,
+.btn-primary.disabled.focus,
+.btn-primary[disabled].focus,
+fieldset[disabled] .btn-primary.focus {
+ background-color: #337ab7;
+ border-color: #2e6da4;
+}
+.btn-primary .badge {
+ color: #337ab7;
+ background-color: #fff;
+}
+.btn-success {
+ color: #fff;
+ background-color: #5cb85c;
+ border-color: #4cae4c;
+}
+.btn-success:focus,
+.btn-success.focus {
+ color: #fff;
+ background-color: #449d44;
+ border-color: #255625;
+}
+.btn-success:hover {
+ color: #fff;
+ background-color: #449d44;
+ border-color: #398439;
+}
+.btn-success:active,
+.btn-success.active,
+.open > .dropdown-toggle.btn-success {
+ color: #fff;
+ background-color: #449d44;
+ border-color: #398439;
+}
+.btn-success:active:hover,
+.btn-success.active:hover,
+.open > .dropdown-toggle.btn-success:hover,
+.btn-success:active:focus,
+.btn-success.active:focus,
+.open > .dropdown-toggle.btn-success:focus,
+.btn-success:active.focus,
+.btn-success.active.focus,
+.open > .dropdown-toggle.btn-success.focus {
+ color: #fff;
+ background-color: #398439;
+ border-color: #255625;
+}
+.btn-success:active,
+.btn-success.active,
+.open > .dropdown-toggle.btn-success {
+ background-image: none;
+}
+.btn-success.disabled:hover,
+.btn-success[disabled]:hover,
+fieldset[disabled] .btn-success:hover,
+.btn-success.disabled:focus,
+.btn-success[disabled]:focus,
+fieldset[disabled] .btn-success:focus,
+.btn-success.disabled.focus,
+.btn-success[disabled].focus,
+fieldset[disabled] .btn-success.focus {
+ background-color: #5cb85c;
+ border-color: #4cae4c;
+}
+.btn-success .badge {
+ color: #5cb85c;
+ background-color: #fff;
+}
+.btn-info {
+ color: #fff;
+ background-color: #5bc0de;
+ border-color: #46b8da;
+}
+.btn-info:focus,
+.btn-info.focus {
+ color: #fff;
+ background-color: #31b0d5;
+ border-color: #1b6d85;
+}
+.btn-info:hover {
+ color: #fff;
+ background-color: #31b0d5;
+ border-color: #269abc;
+}
+.btn-info:active,
+.btn-info.active,
+.open > .dropdown-toggle.btn-info {
+ color: #fff;
+ background-color: #31b0d5;
+ border-color: #269abc;
+}
+.btn-info:active:hover,
+.btn-info.active:hover,
+.open > .dropdown-toggle.btn-info:hover,
+.btn-info:active:focus,
+.btn-info.active:focus,
+.open > .dropdown-toggle.btn-info:focus,
+.btn-info:active.focus,
+.btn-info.active.focus,
+.open > .dropdown-toggle.btn-info.focus {
+ color: #fff;
+ background-color: #269abc;
+ border-color: #1b6d85;
+}
+.btn-info:active,
+.btn-info.active,
+.open > .dropdown-toggle.btn-info {
+ background-image: none;
+}
+.btn-info.disabled:hover,
+.btn-info[disabled]:hover,
+fieldset[disabled] .btn-info:hover,
+.btn-info.disabled:focus,
+.btn-info[disabled]:focus,
+fieldset[disabled] .btn-info:focus,
+.btn-info.disabled.focus,
+.btn-info[disabled].focus,
+fieldset[disabled] .btn-info.focus {
+ background-color: #5bc0de;
+ border-color: #46b8da;
+}
+.btn-info .badge {
+ color: #5bc0de;
+ background-color: #fff;
+}
+.btn-warning {
+ color: #fff;
+ background-color: #f0ad4e;
+ border-color: #eea236;
+}
+.btn-warning:focus,
+.btn-warning.focus {
+ color: #fff;
+ background-color: #ec971f;
+ border-color: #985f0d;
+}
+.btn-warning:hover {
+ color: #fff;
+ background-color: #ec971f;
+ border-color: #d58512;
+}
+.btn-warning:active,
+.btn-warning.active,
+.open > .dropdown-toggle.btn-warning {
+ color: #fff;
+ background-color: #ec971f;
+ border-color: #d58512;
+}
+.btn-warning:active:hover,
+.btn-warning.active:hover,
+.open > .dropdown-toggle.btn-warning:hover,
+.btn-warning:active:focus,
+.btn-warning.active:focus,
+.open > .dropdown-toggle.btn-warning:focus,
+.btn-warning:active.focus,
+.btn-warning.active.focus,
+.open > .dropdown-toggle.btn-warning.focus {
+ color: #fff;
+ background-color: #d58512;
+ border-color: #985f0d;
+}
+.btn-warning:active,
+.btn-warning.active,
+.open > .dropdown-toggle.btn-warning {
+ background-image: none;
+}
+.btn-warning.disabled:hover,
+.btn-warning[disabled]:hover,
+fieldset[disabled] .btn-warning:hover,
+.btn-warning.disabled:focus,
+.btn-warning[disabled]:focus,
+fieldset[disabled] .btn-warning:focus,
+.btn-warning.disabled.focus,
+.btn-warning[disabled].focus,
+fieldset[disabled] .btn-warning.focus {
+ background-color: #f0ad4e;
+ border-color: #eea236;
+}
+.btn-warning .badge {
+ color: #f0ad4e;
+ background-color: #fff;
+}
+.btn-danger {
+ color: #fff;
+ background-color: #d9534f;
+ border-color: #d43f3a;
+}
+.btn-danger:focus,
+.btn-danger.focus {
+ color: #fff;
+ background-color: #c9302c;
+ border-color: #761c19;
+}
+.btn-danger:hover {
+ color: #fff;
+ background-color: #c9302c;
+ border-color: #ac2925;
+}
+.btn-danger:active,
+.btn-danger.active,
+.open > .dropdown-toggle.btn-danger {
+ color: #fff;
+ background-color: #c9302c;
+ border-color: #ac2925;
+}
+.btn-danger:active:hover,
+.btn-danger.active:hover,
+.open > .dropdown-toggle.btn-danger:hover,
+.btn-danger:active:focus,
+.btn-danger.active:focus,
+.open > .dropdown-toggle.btn-danger:focus,
+.btn-danger:active.focus,
+.btn-danger.active.focus,
+.open > .dropdown-toggle.btn-danger.focus {
+ color: #fff;
+ background-color: #ac2925;
+ border-color: #761c19;
+}
+.btn-danger:active,
+.btn-danger.active,
+.open > .dropdown-toggle.btn-danger {
+ background-image: none;
+}
+.btn-danger.disabled:hover,
+.btn-danger[disabled]:hover,
+fieldset[disabled] .btn-danger:hover,
+.btn-danger.disabled:focus,
+.btn-danger[disabled]:focus,
+fieldset[disabled] .btn-danger:focus,
+.btn-danger.disabled.focus,
+.btn-danger[disabled].focus,
+fieldset[disabled] .btn-danger.focus {
+ background-color: #d9534f;
+ border-color: #d43f3a;
+}
+.btn-danger .badge {
+ color: #d9534f;
+ background-color: #fff;
+}
+.btn-link {
+ font-weight: normal;
+ color: #337ab7;
+ border-radius: 0;
+}
+.btn-link,
+.btn-link:active,
+.btn-link.active,
+.btn-link[disabled],
+fieldset[disabled] .btn-link {
+ background-color: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+.btn-link,
+.btn-link:hover,
+.btn-link:focus,
+.btn-link:active {
+ border-color: transparent;
+}
+.btn-link:hover,
+.btn-link:focus {
+ color: #23527c;
+ text-decoration: underline;
+ background-color: transparent;
+}
+.btn-link[disabled]:hover,
+fieldset[disabled] .btn-link:hover,
+.btn-link[disabled]:focus,
+fieldset[disabled] .btn-link:focus {
+ color: #777;
+ text-decoration: none;
+}
+.btn-lg,
+.btn-group-lg > .btn {
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+ border-radius: 6px;
+}
+.btn-sm,
+.btn-group-sm > .btn {
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+.btn-xs,
+.btn-group-xs > .btn {
+ padding: 1px 5px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+.btn-block {
+ display: block;
+ width: 100%;
+}
+.btn-block + .btn-block {
+ margin-top: 5px;
+}
+input[type="submit"].btn-block,
+input[type="reset"].btn-block,
+input[type="button"].btn-block {
+ width: 100%;
+}
+.fade {
+ opacity: 0;
+ -webkit-transition: opacity .15s linear;
+ -o-transition: opacity .15s linear;
+ transition: opacity .15s linear;
+}
+.fade.in {
+ opacity: 1;
+}
+.collapse {
+ display: none;
+}
+.collapse.in {
+ display: block;
+}
+tr.collapse.in {
+ display: table-row;
+}
+tbody.collapse.in {
+ display: table-row-group;
+}
+.collapsing {
+ position: relative;
+ height: 0;
+ overflow: hidden;
+ -webkit-transition-timing-function: ease;
+ -o-transition-timing-function: ease;
+ transition-timing-function: ease;
+ -webkit-transition-duration: .35s;
+ -o-transition-duration: .35s;
+ transition-duration: .35s;
+ -webkit-transition-property: height, visibility;
+ -o-transition-property: height, visibility;
+ transition-property: height, visibility;
+}
+.caret {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ margin-left: 2px;
+ vertical-align: middle;
+ border-top: 4px dashed;
+ border-top: 4px solid \9;
+ border-right: 4px solid transparent;
+ border-left: 4px solid transparent;
+}
+.dropup,
+.dropdown {
+ position: relative;
+}
+.dropdown-toggle:focus {
+ outline: 0;
+}
+.dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1000;
+ display: none;
+ float: left;
+ min-width: 160px;
+ padding: 5px 0;
+ margin: 2px 0 0;
+ font-size: 14px;
+ text-align: left;
+ list-style: none;
+ background-color: #fff;
+ -webkit-background-clip: padding-box;
+ background-clip: padding-box;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, .15);
+ border-radius: 4px;
+ -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+ box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+}
+.dropdown-menu.pull-right {
+ right: 0;
+ left: auto;
+}
+.dropdown-menu .divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5;
+}
+.dropdown-menu > li > a {
+ display: block;
+ padding: 3px 20px;
+ clear: both;
+ font-weight: normal;
+ line-height: 1.42857143;
+ color: #333;
+ white-space: nowrap;
+}
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus {
+ color: #262626;
+ text-decoration: none;
+ background-color: #f5f5f5;
+}
+.dropdown-menu > .active > a,
+.dropdown-menu > .active > a:hover,
+.dropdown-menu > .active > a:focus {
+ color: #fff;
+ text-decoration: none;
+ background-color: #337ab7;
+ outline: 0;
+}
+.dropdown-menu > .disabled > a,
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+ color: #777;
+}
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+ text-decoration: none;
+ cursor: not-allowed;
+ background-color: transparent;
+ background-image: none;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+}
+.open > .dropdown-menu {
+ display: block;
+}
+.open > a {
+ outline: 0;
+}
+.dropdown-menu-right {
+ right: 0;
+ left: auto;
+}
+.dropdown-menu-left {
+ right: auto;
+ left: 0;
+}
+.dropdown-header {
+ display: block;
+ padding: 3px 20px;
+ font-size: 12px;
+ line-height: 1.42857143;
+ color: #777;
+ white-space: nowrap;
+}
+.dropdown-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 990;
+}
+.pull-right > .dropdown-menu {
+ right: 0;
+ left: auto;
+}
+.dropup .caret,
+.navbar-fixed-bottom .dropdown .caret {
+ content: "";
+ border-top: 0;
+ border-bottom: 4px dashed;
+ border-bottom: 4px solid \9;
+}
+.dropup .dropdown-menu,
+.navbar-fixed-bottom .dropdown .dropdown-menu {
+ top: auto;
+ bottom: 100%;
+ margin-bottom: 2px;
+}
+@media (min-width: 768px) {
+ .navbar-right .dropdown-menu {
+ right: 0;
+ left: auto;
+ }
+ .navbar-right .dropdown-menu-left {
+ right: auto;
+ left: 0;
+ }
+}
+.btn-group,
+.btn-group-vertical {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+}
+.btn-group > .btn,
+.btn-group-vertical > .btn {
+ position: relative;
+ float: left;
+}
+.btn-group > .btn:hover,
+.btn-group-vertical > .btn:hover,
+.btn-group > .btn:focus,
+.btn-group-vertical > .btn:focus,
+.btn-group > .btn:active,
+.btn-group-vertical > .btn:active,
+.btn-group > .btn.active,
+.btn-group-vertical > .btn.active {
+ z-index: 2;
+}
+.btn-group .btn + .btn,
+.btn-group .btn + .btn-group,
+.btn-group .btn-group + .btn,
+.btn-group .btn-group + .btn-group {
+ margin-left: -1px;
+}
+.btn-toolbar {
+ margin-left: -5px;
+}
+.btn-toolbar .btn,
+.btn-toolbar .btn-group,
+.btn-toolbar .input-group {
+ float: left;
+}
+.btn-toolbar > .btn,
+.btn-toolbar > .btn-group,
+.btn-toolbar > .input-group {
+ margin-left: 5px;
+}
+.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
+ border-radius: 0;
+}
+.btn-group > .btn:first-child {
+ margin-left: 0;
+}
+.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+.btn-group > .btn:last-child:not(:first-child),
+.btn-group > .dropdown-toggle:not(:first-child) {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.btn-group > .btn-group {
+ float: left;
+}
+.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0;
+}
+.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
+.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.btn-group .dropdown-toggle:active,
+.btn-group.open .dropdown-toggle {
+ outline: 0;
+}
+.btn-group > .btn + .dropdown-toggle {
+ padding-right: 8px;
+ padding-left: 8px;
+}
+.btn-group > .btn-lg + .dropdown-toggle {
+ padding-right: 12px;
+ padding-left: 12px;
+}
+.btn-group.open .dropdown-toggle {
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+}
+.btn-group.open .dropdown-toggle.btn-link {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+.btn .caret {
+ margin-left: 0;
+}
+.btn-lg .caret {
+ border-width: 5px 5px 0;
+ border-bottom-width: 0;
+}
+.dropup .btn-lg .caret {
+ border-width: 0 5px 5px;
+}
+.btn-group-vertical > .btn,
+.btn-group-vertical > .btn-group,
+.btn-group-vertical > .btn-group > .btn {
+ display: block;
+ float: none;
+ width: 100%;
+ max-width: 100%;
+}
+.btn-group-vertical > .btn-group > .btn {
+ float: none;
+}
+.btn-group-vertical > .btn + .btn,
+.btn-group-vertical > .btn + .btn-group,
+.btn-group-vertical > .btn-group + .btn,
+.btn-group-vertical > .btn-group + .btn-group {
+ margin-top: -1px;
+ margin-left: 0;
+}
+.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
+ border-radius: 0;
+}
+.btn-group-vertical > .btn:first-child:not(:last-child) {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.btn-group-vertical > .btn:last-child:not(:first-child) {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0;
+}
+.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
+.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+.btn-group-justified {
+ display: table;
+ width: 100%;
+ table-layout: fixed;
+ border-collapse: separate;
+}
+.btn-group-justified > .btn,
+.btn-group-justified > .btn-group {
+ display: table-cell;
+ float: none;
+ width: 1%;
+}
+.btn-group-justified > .btn-group .btn {
+ width: 100%;
+}
+.btn-group-justified > .btn-group .dropdown-menu {
+ left: auto;
+}
+[data-toggle="buttons"] > .btn input[type="radio"],
+[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
+[data-toggle="buttons"] > .btn input[type="checkbox"],
+[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
+ position: absolute;
+ clip: rect(0, 0, 0, 0);
+ pointer-events: none;
+}
+.input-group {
+ position: relative;
+ display: table;
+ border-collapse: separate;
+}
+.input-group[class*="col-"] {
+ float: none;
+ padding-right: 0;
+ padding-left: 0;
+}
+.input-group .form-control {
+ position: relative;
+ z-index: 2;
+ float: left;
+ width: 100%;
+ margin-bottom: 0;
+}
+.input-group .form-control:focus {
+ z-index: 3;
+}
+.input-group-lg > .form-control,
+.input-group-lg > .input-group-addon,
+.input-group-lg > .input-group-btn > .btn {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+ border-radius: 6px;
+}
+select.input-group-lg > .form-control,
+select.input-group-lg > .input-group-addon,
+select.input-group-lg > .input-group-btn > .btn {
+ height: 46px;
+ line-height: 46px;
+}
+textarea.input-group-lg > .form-control,
+textarea.input-group-lg > .input-group-addon,
+textarea.input-group-lg > .input-group-btn > .btn,
+select[multiple].input-group-lg > .form-control,
+select[multiple].input-group-lg > .input-group-addon,
+select[multiple].input-group-lg > .input-group-btn > .btn {
+ height: auto;
+}
+.input-group-sm > .form-control,
+.input-group-sm > .input-group-addon,
+.input-group-sm > .input-group-btn > .btn {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+select.input-group-sm > .form-control,
+select.input-group-sm > .input-group-addon,
+select.input-group-sm > .input-group-btn > .btn {
+ height: 30px;
+ line-height: 30px;
+}
+textarea.input-group-sm > .form-control,
+textarea.input-group-sm > .input-group-addon,
+textarea.input-group-sm > .input-group-btn > .btn,
+select[multiple].input-group-sm > .form-control,
+select[multiple].input-group-sm > .input-group-addon,
+select[multiple].input-group-sm > .input-group-btn > .btn {
+ height: auto;
+}
+.input-group-addon,
+.input-group-btn,
+.input-group .form-control {
+ display: table-cell;
+}
+.input-group-addon:not(:first-child):not(:last-child),
+.input-group-btn:not(:first-child):not(:last-child),
+.input-group .form-control:not(:first-child):not(:last-child) {
+ border-radius: 0;
+}
+.input-group-addon,
+.input-group-btn {
+ width: 1%;
+ white-space: nowrap;
+ vertical-align: middle;
+}
+.input-group-addon {
+ padding: 6px 12px;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 1;
+ color: #555;
+ text-align: center;
+ background-color: #eee;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+}
+.input-group-addon.input-sm {
+ padding: 5px 10px;
+ font-size: 12px;
+ border-radius: 3px;
+}
+.input-group-addon.input-lg {
+ padding: 10px 16px;
+ font-size: 18px;
+ border-radius: 6px;
+}
+.input-group-addon input[type="radio"],
+.input-group-addon input[type="checkbox"] {
+ margin-top: 0;
+}
+.input-group .form-control:first-child,
+.input-group-addon:first-child,
+.input-group-btn:first-child > .btn,
+.input-group-btn:first-child > .btn-group > .btn,
+.input-group-btn:first-child > .dropdown-toggle,
+.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
+.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+.input-group-addon:first-child {
+ border-right: 0;
+}
+.input-group .form-control:last-child,
+.input-group-addon:last-child,
+.input-group-btn:last-child > .btn,
+.input-group-btn:last-child > .btn-group > .btn,
+.input-group-btn:last-child > .dropdown-toggle,
+.input-group-btn:first-child > .btn:not(:first-child),
+.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.input-group-addon:last-child {
+ border-left: 0;
+}
+.input-group-btn {
+ position: relative;
+ font-size: 0;
+ white-space: nowrap;
+}
+.input-group-btn > .btn {
+ position: relative;
+}
+.input-group-btn > .btn + .btn {
+ margin-left: -1px;
+}
+.input-group-btn > .btn:hover,
+.input-group-btn > .btn:focus,
+.input-group-btn > .btn:active {
+ z-index: 2;
+}
+.input-group-btn:first-child > .btn,
+.input-group-btn:first-child > .btn-group {
+ margin-right: -1px;
+}
+.input-group-btn:last-child > .btn,
+.input-group-btn:last-child > .btn-group {
+ z-index: 2;
+ margin-left: -1px;
+}
+.nav {
+ padding-left: 0;
+ margin-bottom: 0;
+ list-style: none;
+}
+.nav > li {
+ position: relative;
+ display: block;
+}
+.nav > li > a {
+ position: relative;
+ display: block;
+ padding: 10px 15px;
+}
+.nav > li > a:hover,
+.nav > li > a:focus {
+ text-decoration: none;
+ background-color: #eee;
+}
+.nav > li.disabled > a {
+ color: #777;
+}
+.nav > li.disabled > a:hover,
+.nav > li.disabled > a:focus {
+ color: #777;
+ text-decoration: none;
+ cursor: not-allowed;
+ background-color: transparent;
+}
+.nav .open > a,
+.nav .open > a:hover,
+.nav .open > a:focus {
+ background-color: #eee;
+ border-color: #337ab7;
+}
+.nav .nav-divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5;
+}
+.nav > li > a > img {
+ max-width: none;
+}
+.nav-tabs {
+ border-bottom: 1px solid #ddd;
+}
+.nav-tabs > li {
+ float: left;
+ margin-bottom: -1px;
+}
+.nav-tabs > li > a {
+ margin-right: 2px;
+ line-height: 1.42857143;
+ border: 1px solid transparent;
+ border-radius: 4px 4px 0 0;
+}
+.nav-tabs > li > a:hover {
+ border-color: #eee #eee #ddd;
+}
+.nav-tabs > li.active > a,
+.nav-tabs > li.active > a:hover,
+.nav-tabs > li.active > a:focus {
+ color: #555;
+ cursor: default;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-bottom-color: transparent;
+}
+.nav-tabs.nav-justified {
+ width: 100%;
+ border-bottom: 0;
+}
+.nav-tabs.nav-justified > li {
+ float: none;
+}
+.nav-tabs.nav-justified > li > a {
+ margin-bottom: 5px;
+ text-align: center;
+}
+.nav-tabs.nav-justified > .dropdown .dropdown-menu {
+ top: auto;
+ left: auto;
+}
+@media (min-width: 768px) {
+ .nav-tabs.nav-justified > li {
+ display: table-cell;
+ width: 1%;
+ }
+ .nav-tabs.nav-justified > li > a {
+ margin-bottom: 0;
+ }
+}
+.nav-tabs.nav-justified > li > a {
+ margin-right: 0;
+ border-radius: 4px;
+}
+.nav-tabs.nav-justified > .active > a,
+.nav-tabs.nav-justified > .active > a:hover,
+.nav-tabs.nav-justified > .active > a:focus {
+ border: 1px solid #ddd;
+}
+@media (min-width: 768px) {
+ .nav-tabs.nav-justified > li > a {
+ border-bottom: 1px solid #ddd;
+ border-radius: 4px 4px 0 0;
+ }
+ .nav-tabs.nav-justified > .active > a,
+ .nav-tabs.nav-justified > .active > a:hover,
+ .nav-tabs.nav-justified > .active > a:focus {
+ border-bottom-color: #fff;
+ }
+}
+.nav-pills > li {
+ float: left;
+}
+.nav-pills > li > a {
+ border-radius: 4px;
+}
+.nav-pills > li + li {
+ margin-left: 2px;
+}
+.nav-pills > li.active > a,
+.nav-pills > li.active > a:hover,
+.nav-pills > li.active > a:focus {
+ color: #fff;
+ background-color: #337ab7;
+}
+.nav-stacked > li {
+ float: none;
+}
+.nav-stacked > li + li {
+ margin-top: 2px;
+ margin-left: 0;
+}
+.nav-justified {
+ width: 100%;
+}
+.nav-justified > li {
+ float: none;
+}
+.nav-justified > li > a {
+ margin-bottom: 5px;
+ text-align: center;
+}
+.nav-justified > .dropdown .dropdown-menu {
+ top: auto;
+ left: auto;
+}
+@media (min-width: 768px) {
+ .nav-justified > li {
+ display: table-cell;
+ width: 1%;
+ }
+ .nav-justified > li > a {
+ margin-bottom: 0;
+ }
+}
+.nav-tabs-justified {
+ border-bottom: 0;
+}
+.nav-tabs-justified > li > a {
+ margin-right: 0;
+ border-radius: 4px;
+}
+.nav-tabs-justified > .active > a,
+.nav-tabs-justified > .active > a:hover,
+.nav-tabs-justified > .active > a:focus {
+ border: 1px solid #ddd;
+}
+@media (min-width: 768px) {
+ .nav-tabs-justified > li > a {
+ border-bottom: 1px solid #ddd;
+ border-radius: 4px 4px 0 0;
+ }
+ .nav-tabs-justified > .active > a,
+ .nav-tabs-justified > .active > a:hover,
+ .nav-tabs-justified > .active > a:focus {
+ border-bottom-color: #fff;
+ }
+}
+.tab-content > .tab-pane {
+ display: none;
+}
+.tab-content > .active {
+ display: block;
+}
+.nav-tabs .dropdown-menu {
+ margin-top: -1px;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+.navbar {
+ position: relative;
+ min-height: 50px;
+ margin-bottom: 20px;
+ border: 1px solid transparent;
+}
+@media (min-width: 768px) {
+ .navbar {
+ border-radius: 4px;
+ }
+}
+@media (min-width: 768px) {
+ .navbar-header {
+ float: left;
+ }
+}
+.navbar-collapse {
+ padding-right: 15px;
+ padding-left: 15px;
+ overflow-x: visible;
+ -webkit-overflow-scrolling: touch;
+ border-top: 1px solid transparent;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
+}
+.navbar-collapse.in {
+ overflow-y: auto;
+}
+@media (min-width: 768px) {
+ .navbar-collapse {
+ width: auto;
+ border-top: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+ .navbar-collapse.collapse {
+ display: block !important;
+ height: auto !important;
+ padding-bottom: 0;
+ overflow: visible !important;
+ }
+ .navbar-collapse.in {
+ overflow-y: visible;
+ }
+ .navbar-fixed-top .navbar-collapse,
+ .navbar-static-top .navbar-collapse,
+ .navbar-fixed-bottom .navbar-collapse {
+ padding-right: 0;
+ padding-left: 0;
+ }
+}
+.navbar-fixed-top .navbar-collapse,
+.navbar-fixed-bottom .navbar-collapse {
+ max-height: 340px;
+}
+@media (max-device-width: 480px) and (orientation: landscape) {
+ .navbar-fixed-top .navbar-collapse,
+ .navbar-fixed-bottom .navbar-collapse {
+ max-height: 200px;
+ }
+}
+.container > .navbar-header,
+.container-fluid > .navbar-header,
+.container > .navbar-collapse,
+.container-fluid > .navbar-collapse {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+@media (min-width: 768px) {
+ .container > .navbar-header,
+ .container-fluid > .navbar-header,
+ .container > .navbar-collapse,
+ .container-fluid > .navbar-collapse {
+ margin-right: 0;
+ margin-left: 0;
+ }
+}
+.navbar-static-top {
+ z-index: 1000;
+ border-width: 0 0 1px;
+}
+@media (min-width: 768px) {
+ .navbar-static-top {
+ border-radius: 0;
+ }
+}
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+ position: fixed;
+ right: 0;
+ left: 0;
+ z-index: 1030;
+}
+@media (min-width: 768px) {
+ .navbar-fixed-top,
+ .navbar-fixed-bottom {
+ border-radius: 0;
+ }
+}
+.navbar-fixed-top {
+ top: 0;
+ border-width: 0 0 1px;
+}
+.navbar-fixed-bottom {
+ bottom: 0;
+ margin-bottom: 0;
+ border-width: 1px 0 0;
+}
+.navbar-brand {
+ float: left;
+ height: 50px;
+ padding: 15px 15px;
+ font-size: 18px;
+ line-height: 20px;
+}
+.navbar-brand:hover,
+.navbar-brand:focus {
+ text-decoration: none;
+}
+.navbar-brand > img {
+ display: block;
+}
+@media (min-width: 768px) {
+ .navbar > .container .navbar-brand,
+ .navbar > .container-fluid .navbar-brand {
+ margin-left: -15px;
+ }
+}
+.navbar-toggle {
+ position: relative;
+ float: right;
+ padding: 9px 10px;
+ margin-top: 8px;
+ margin-right: 15px;
+ margin-bottom: 8px;
+ background-color: transparent;
+ background-image: none;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+.navbar-toggle:focus {
+ outline: 0;
+}
+.navbar-toggle .icon-bar {
+ display: block;
+ width: 22px;
+ height: 2px;
+ border-radius: 1px;
+}
+.navbar-toggle .icon-bar + .icon-bar {
+ margin-top: 4px;
+}
+@media (min-width: 768px) {
+ .navbar-toggle {
+ display: none;
+ }
+}
+.navbar-nav {
+ margin: 7.5px -15px;
+}
+.navbar-nav > li > a {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ line-height: 20px;
+}
+@media (max-width: 767px) {
+ .navbar-nav .open .dropdown-menu {
+ position: static;
+ float: none;
+ width: auto;
+ margin-top: 0;
+ background-color: transparent;
+ border: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+ .navbar-nav .open .dropdown-menu > li > a,
+ .navbar-nav .open .dropdown-menu .dropdown-header {
+ padding: 5px 15px 5px 25px;
+ }
+ .navbar-nav .open .dropdown-menu > li > a {
+ line-height: 20px;
+ }
+ .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-nav .open .dropdown-menu > li > a:focus {
+ background-image: none;
+ }
+}
+@media (min-width: 768px) {
+ .navbar-nav {
+ float: left;
+ margin: 0;
+ }
+ .navbar-nav > li {
+ float: left;
+ }
+ .navbar-nav > li > a {
+ padding-top: 15px;
+ padding-bottom: 15px;
+ }
+}
+.navbar-form {
+ padding: 10px 15px;
+ margin-top: 8px;
+ margin-right: -15px;
+ margin-bottom: 8px;
+ margin-left: -15px;
+ border-top: 1px solid transparent;
+ border-bottom: 1px solid transparent;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
+}
+@media (min-width: 768px) {
+ .navbar-form .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .navbar-form .form-control {
+ display: inline-block;
+ width: auto;
+ vertical-align: middle;
+ }
+ .navbar-form .form-control-static {
+ display: inline-block;
+ }
+ .navbar-form .input-group {
+ display: inline-table;
+ vertical-align: middle;
+ }
+ .navbar-form .input-group .input-group-addon,
+ .navbar-form .input-group .input-group-btn,
+ .navbar-form .input-group .form-control {
+ width: auto;
+ }
+ .navbar-form .input-group > .form-control {
+ width: 100%;
+ }
+ .navbar-form .control-label {
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .navbar-form .radio,
+ .navbar-form .checkbox {
+ display: inline-block;
+ margin-top: 0;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .navbar-form .radio label,
+ .navbar-form .checkbox label {
+ padding-left: 0;
+ }
+ .navbar-form .radio input[type="radio"],
+ .navbar-form .checkbox input[type="checkbox"] {
+ position: relative;
+ margin-left: 0;
+ }
+ .navbar-form .has-feedback .form-control-feedback {
+ top: 0;
+ }
+}
+@media (max-width: 767px) {
+ .navbar-form .form-group {
+ margin-bottom: 5px;
+ }
+ .navbar-form .form-group:last-child {
+ margin-bottom: 0;
+ }
+}
+@media (min-width: 768px) {
+ .navbar-form {
+ width: auto;
+ padding-top: 0;
+ padding-bottom: 0;
+ margin-right: 0;
+ margin-left: 0;
+ border: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+}
+.navbar-nav > li > .dropdown-menu {
+ margin-top: 0;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
+ margin-bottom: 0;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.navbar-btn {
+ margin-top: 8px;
+ margin-bottom: 8px;
+}
+.navbar-btn.btn-sm {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+.navbar-btn.btn-xs {
+ margin-top: 14px;
+ margin-bottom: 14px;
+}
+.navbar-text {
+ margin-top: 15px;
+ margin-bottom: 15px;
+}
+@media (min-width: 768px) {
+ .navbar-text {
+ float: left;
+ margin-right: 15px;
+ margin-left: 15px;
+ }
+}
+@media (min-width: 768px) {
+ .navbar-left {
+ float: left !important;
+ }
+ .navbar-right {
+ float: right !important;
+ margin-right: -15px;
+ }
+ .navbar-right ~ .navbar-right {
+ margin-right: 0;
+ }
+}
+.navbar-default {
+ background-color: #f8f8f8;
+ border-color: #e7e7e7;
+}
+.navbar-default .navbar-brand {
+ color: #777;
+}
+.navbar-default .navbar-brand:hover,
+.navbar-default .navbar-brand:focus {
+ color: #5e5e5e;
+ background-color: transparent;
+}
+.navbar-default .navbar-text {
+ color: #777;
+}
+.navbar-default .navbar-nav > li > a {
+ color: #777;
+}
+.navbar-default .navbar-nav > li > a:hover,
+.navbar-default .navbar-nav > li > a:focus {
+ color: #333;
+ background-color: transparent;
+}
+.navbar-default .navbar-nav > .active > a,
+.navbar-default .navbar-nav > .active > a:hover,
+.navbar-default .navbar-nav > .active > a:focus {
+ color: #555;
+ background-color: #e7e7e7;
+}
+.navbar-default .navbar-nav > .disabled > a,
+.navbar-default .navbar-nav > .disabled > a:hover,
+.navbar-default .navbar-nav > .disabled > a:focus {
+ color: #ccc;
+ background-color: transparent;
+}
+.navbar-default .navbar-toggle {
+ border-color: #ddd;
+}
+.navbar-default .navbar-toggle:hover,
+.navbar-default .navbar-toggle:focus {
+ background-color: #ddd;
+}
+.navbar-default .navbar-toggle .icon-bar {
+ background-color: #888;
+}
+.navbar-default .navbar-collapse,
+.navbar-default .navbar-form {
+ border-color: #e7e7e7;
+}
+.navbar-default .navbar-nav > .open > a,
+.navbar-default .navbar-nav > .open > a:hover,
+.navbar-default .navbar-nav > .open > a:focus {
+ color: #555;
+ background-color: #e7e7e7;
+}
+@media (max-width: 767px) {
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a {
+ color: #777;
+ }
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
+ color: #333;
+ background-color: transparent;
+ }
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
+ color: #555;
+ background-color: #e7e7e7;
+ }
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+ color: #ccc;
+ background-color: transparent;
+ }
+}
+.navbar-default .navbar-link {
+ color: #777;
+}
+.navbar-default .navbar-link:hover {
+ color: #333;
+}
+.navbar-default .btn-link {
+ color: #777;
+}
+.navbar-default .btn-link:hover,
+.navbar-default .btn-link:focus {
+ color: #333;
+}
+.navbar-default .btn-link[disabled]:hover,
+fieldset[disabled] .navbar-default .btn-link:hover,
+.navbar-default .btn-link[disabled]:focus,
+fieldset[disabled] .navbar-default .btn-link:focus {
+ color: #ccc;
+}
+.navbar-inverse {
+ background-color: #222;
+ border-color: #080808;
+}
+.navbar-inverse .navbar-brand {
+ color: #9d9d9d;
+}
+.navbar-inverse .navbar-brand:hover,
+.navbar-inverse .navbar-brand:focus {
+ color: #fff;
+ background-color: transparent;
+}
+.navbar-inverse .navbar-text {
+ color: #9d9d9d;
+}
+.navbar-inverse .navbar-nav > li > a {
+ color: #9d9d9d;
+}
+.navbar-inverse .navbar-nav > li > a:hover,
+.navbar-inverse .navbar-nav > li > a:focus {
+ color: #fff;
+ background-color: transparent;
+}
+.navbar-inverse .navbar-nav > .active > a,
+.navbar-inverse .navbar-nav > .active > a:hover,
+.navbar-inverse .navbar-nav > .active > a:focus {
+ color: #fff;
+ background-color: #080808;
+}
+.navbar-inverse .navbar-nav > .disabled > a,
+.navbar-inverse .navbar-nav > .disabled > a:hover,
+.navbar-inverse .navbar-nav > .disabled > a:focus {
+ color: #444;
+ background-color: transparent;
+}
+.navbar-inverse .navbar-toggle {
+ border-color: #333;
+}
+.navbar-inverse .navbar-toggle:hover,
+.navbar-inverse .navbar-toggle:focus {
+ background-color: #333;
+}
+.navbar-inverse .navbar-toggle .icon-bar {
+ background-color: #fff;
+}
+.navbar-inverse .navbar-collapse,
+.navbar-inverse .navbar-form {
+ border-color: #101010;
+}
+.navbar-inverse .navbar-nav > .open > a,
+.navbar-inverse .navbar-nav > .open > a:hover,
+.navbar-inverse .navbar-nav > .open > a:focus {
+ color: #fff;
+ background-color: #080808;
+}
+@media (max-width: 767px) {
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
+ border-color: #080808;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
+ background-color: #080808;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
+ color: #9d9d9d;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
+ color: #fff;
+ background-color: transparent;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
+ color: #fff;
+ background-color: #080808;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+ color: #444;
+ background-color: transparent;
+ }
+}
+.navbar-inverse .navbar-link {
+ color: #9d9d9d;
+}
+.navbar-inverse .navbar-link:hover {
+ color: #fff;
+}
+.navbar-inverse .btn-link {
+ color: #9d9d9d;
+}
+.navbar-inverse .btn-link:hover,
+.navbar-inverse .btn-link:focus {
+ color: #fff;
+}
+.navbar-inverse .btn-link[disabled]:hover,
+fieldset[disabled] .navbar-inverse .btn-link:hover,
+.navbar-inverse .btn-link[disabled]:focus,
+fieldset[disabled] .navbar-inverse .btn-link:focus {
+ color: #444;
+}
+.breadcrumb {
+ padding: 8px 15px;
+ margin-bottom: 20px;
+ list-style: none;
+ background-color: #f5f5f5;
+ border-radius: 4px;
+}
+.breadcrumb > li {
+ display: inline-block;
+}
+.breadcrumb > li + li:before {
+ padding: 0 5px;
+ color: #ccc;
+ content: "/\00a0";
+}
+.breadcrumb > .active {
+ color: #777;
+}
+.pagination {
+ display: inline-block;
+ padding-left: 0;
+ margin: 20px 0;
+ border-radius: 4px;
+}
+.pagination > li {
+ display: inline;
+}
+.pagination > li > a,
+.pagination > li > span {
+ position: relative;
+ float: left;
+ padding: 6px 12px;
+ margin-left: -1px;
+ line-height: 1.42857143;
+ color: #337ab7;
+ text-decoration: none;
+ background-color: #fff;
+ border: 1px solid #ddd;
+}
+.pagination > li:first-child > a,
+.pagination > li:first-child > span {
+ margin-left: 0;
+ border-top-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+.pagination > li:last-child > a,
+.pagination > li:last-child > span {
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+}
+.pagination > li > a:hover,
+.pagination > li > span:hover,
+.pagination > li > a:focus,
+.pagination > li > span:focus {
+ z-index: 2;
+ color: #23527c;
+ background-color: #eee;
+ border-color: #ddd;
+}
+.pagination > .active > a,
+.pagination > .active > span,
+.pagination > .active > a:hover,
+.pagination > .active > span:hover,
+.pagination > .active > a:focus,
+.pagination > .active > span:focus {
+ z-index: 3;
+ color: #fff;
+ cursor: default;
+ background-color: #337ab7;
+ border-color: #337ab7;
+}
+.pagination > .disabled > span,
+.pagination > .disabled > span:hover,
+.pagination > .disabled > span:focus,
+.pagination > .disabled > a,
+.pagination > .disabled > a:hover,
+.pagination > .disabled > a:focus {
+ color: #777;
+ cursor: not-allowed;
+ background-color: #fff;
+ border-color: #ddd;
+}
+.pagination-lg > li > a,
+.pagination-lg > li > span {
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+}
+.pagination-lg > li:first-child > a,
+.pagination-lg > li:first-child > span {
+ border-top-left-radius: 6px;
+ border-bottom-left-radius: 6px;
+}
+.pagination-lg > li:last-child > a,
+.pagination-lg > li:last-child > span {
+ border-top-right-radius: 6px;
+ border-bottom-right-radius: 6px;
+}
+.pagination-sm > li > a,
+.pagination-sm > li > span {
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+}
+.pagination-sm > li:first-child > a,
+.pagination-sm > li:first-child > span {
+ border-top-left-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.pagination-sm > li:last-child > a,
+.pagination-sm > li:last-child > span {
+ border-top-right-radius: 3px;
+ border-bottom-right-radius: 3px;
+}
+.pager {
+ padding-left: 0;
+ margin: 20px 0;
+ text-align: center;
+ list-style: none;
+}
+.pager li {
+ display: inline;
+}
+.pager li > a,
+.pager li > span {
+ display: inline-block;
+ padding: 5px 14px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 15px;
+}
+.pager li > a:hover,
+.pager li > a:focus {
+ text-decoration: none;
+ background-color: #eee;
+}
+.pager .next > a,
+.pager .next > span {
+ float: right;
+}
+.pager .previous > a,
+.pager .previous > span {
+ float: left;
+}
+.pager .disabled > a,
+.pager .disabled > a:hover,
+.pager .disabled > a:focus,
+.pager .disabled > span {
+ color: #777;
+ cursor: not-allowed;
+ background-color: #fff;
+}
+.label {
+ display: inline;
+ padding: .2em .6em .3em;
+ font-size: 75%;
+ font-weight: bold;
+ line-height: 1;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ border-radius: .25em;
+}
+a.label:hover,
+a.label:focus {
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer;
+}
+.label:empty {
+ display: none;
+}
+.btn .label {
+ position: relative;
+ top: -1px;
+}
+.label-default {
+ background-color: #777;
+}
+.label-default[href]:hover,
+.label-default[href]:focus {
+ background-color: #5e5e5e;
+}
+.label-primary {
+ background-color: #337ab7;
+}
+.label-primary[href]:hover,
+.label-primary[href]:focus {
+ background-color: #286090;
+}
+.label-success {
+ background-color: #5cb85c;
+}
+.label-success[href]:hover,
+.label-success[href]:focus {
+ background-color: #449d44;
+}
+.label-info {
+ background-color: #5bc0de;
+}
+.label-info[href]:hover,
+.label-info[href]:focus {
+ background-color: #31b0d5;
+}
+.label-warning {
+ background-color: #f0ad4e;
+}
+.label-warning[href]:hover,
+.label-warning[href]:focus {
+ background-color: #ec971f;
+}
+.label-danger {
+ background-color: #d9534f;
+}
+.label-danger[href]:hover,
+.label-danger[href]:focus {
+ background-color: #c9302c;
+}
+.badge {
+ display: inline-block;
+ min-width: 10px;
+ padding: 3px 7px;
+ font-size: 12px;
+ font-weight: bold;
+ line-height: 1;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: middle;
+ background-color: #777;
+ border-radius: 10px;
+}
+.badge:empty {
+ display: none;
+}
+.btn .badge {
+ position: relative;
+ top: -1px;
+}
+.btn-xs .badge,
+.btn-group-xs > .btn .badge {
+ top: 0;
+ padding: 1px 5px;
+}
+a.badge:hover,
+a.badge:focus {
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer;
+}
+.list-group-item.active > .badge,
+.nav-pills > .active > a > .badge {
+ color: #337ab7;
+ background-color: #fff;
+}
+.list-group-item > .badge {
+ float: right;
+}
+.list-group-item > .badge + .badge {
+ margin-right: 5px;
+}
+.nav-pills > li > a > .badge {
+ margin-left: 3px;
+}
+.jumbotron {
+ padding-top: 30px;
+ padding-bottom: 30px;
+ margin-bottom: 30px;
+ color: inherit;
+ background-color: #eee;
+}
+.jumbotron h1,
+.jumbotron .h1 {
+ color: inherit;
+}
+.jumbotron p {
+ margin-bottom: 15px;
+ font-size: 21px;
+ font-weight: 200;
+}
+.jumbotron > hr {
+ border-top-color: #d5d5d5;
+}
+.container .jumbotron,
+.container-fluid .jumbotron {
+ padding-right: 15px;
+ padding-left: 15px;
+ border-radius: 6px;
+}
+.jumbotron .container {
+ max-width: 100%;
+}
+@media screen and (min-width: 768px) {
+ .jumbotron {
+ padding-top: 48px;
+ padding-bottom: 48px;
+ }
+ .container .jumbotron,
+ .container-fluid .jumbotron {
+ padding-right: 60px;
+ padding-left: 60px;
+ }
+ .jumbotron h1,
+ .jumbotron .h1 {
+ font-size: 63px;
+ }
+}
+.thumbnail {
+ display: block;
+ padding: 4px;
+ margin-bottom: 20px;
+ line-height: 1.42857143;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ -webkit-transition: border .2s ease-in-out;
+ -o-transition: border .2s ease-in-out;
+ transition: border .2s ease-in-out;
+}
+.thumbnail > img,
+.thumbnail a > img {
+ margin-right: auto;
+ margin-left: auto;
+}
+a.thumbnail:hover,
+a.thumbnail:focus,
+a.thumbnail.active {
+ border-color: #337ab7;
+}
+.thumbnail .caption {
+ padding: 9px;
+ color: #333;
+}
+.alert {
+ padding: 15px;
+ margin-bottom: 20px;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+.alert h4 {
+ margin-top: 0;
+ color: inherit;
+}
+.alert .alert-link {
+ font-weight: bold;
+}
+.alert > p,
+.alert > ul {
+ margin-bottom: 0;
+}
+.alert > p + p {
+ margin-top: 5px;
+}
+.alert-dismissable,
+.alert-dismissible {
+ padding-right: 35px;
+}
+.alert-dismissable .close,
+.alert-dismissible .close {
+ position: relative;
+ top: -2px;
+ right: -21px;
+ color: inherit;
+}
+.alert-success {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+}
+.alert-success hr {
+ border-top-color: #c9e2b3;
+}
+.alert-success .alert-link {
+ color: #2b542c;
+}
+.alert-info {
+ color: #31708f;
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+}
+.alert-info hr {
+ border-top-color: #a6e1ec;
+}
+.alert-info .alert-link {
+ color: #245269;
+}
+.alert-warning {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #faebcc;
+}
+.alert-warning hr {
+ border-top-color: #f7e1b5;
+}
+.alert-warning .alert-link {
+ color: #66512c;
+}
+.alert-danger {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #ebccd1;
+}
+.alert-danger hr {
+ border-top-color: #e4b9c0;
+}
+.alert-danger .alert-link {
+ color: #843534;
+}
+@-webkit-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+@-o-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+@keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+.progress {
+ height: 20px;
+ margin-bottom: 20px;
+ overflow: hidden;
+ background-color: #f5f5f5;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
+}
+.progress-bar {
+ float: left;
+ width: 0;
+ height: 100%;
+ font-size: 12px;
+ line-height: 20px;
+ color: #fff;
+ text-align: center;
+ background-color: #337ab7;
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
+ -webkit-transition: width .6s ease;
+ -o-transition: width .6s ease;
+ transition: width .6s ease;
+}
+.progress-striped .progress-bar,
+.progress-bar-striped {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ -webkit-background-size: 40px 40px;
+ background-size: 40px 40px;
+}
+.progress.active .progress-bar,
+.progress-bar.active {
+ -webkit-animation: progress-bar-stripes 2s linear infinite;
+ -o-animation: progress-bar-stripes 2s linear infinite;
+ animation: progress-bar-stripes 2s linear infinite;
+}
+.progress-bar-success {
+ background-color: #5cb85c;
+}
+.progress-striped .progress-bar-success {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.progress-bar-info {
+ background-color: #5bc0de;
+}
+.progress-striped .progress-bar-info {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.progress-bar-warning {
+ background-color: #f0ad4e;
+}
+.progress-striped .progress-bar-warning {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.progress-bar-danger {
+ background-color: #d9534f;
+}
+.progress-striped .progress-bar-danger {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.media {
+ margin-top: 15px;
+}
+.media:first-child {
+ margin-top: 0;
+}
+.media,
+.media-body {
+ overflow: hidden;
+ zoom: 1;
+}
+.media-body {
+ width: 10000px;
+}
+.media-object {
+ display: block;
+}
+.media-object.img-thumbnail {
+ max-width: none;
+}
+.media-right,
+.media > .pull-right {
+ padding-left: 10px;
+}
+.media-left,
+.media > .pull-left {
+ padding-right: 10px;
+}
+.media-left,
+.media-right,
+.media-body {
+ display: table-cell;
+ vertical-align: top;
+}
+.media-middle {
+ vertical-align: middle;
+}
+.media-bottom {
+ vertical-align: bottom;
+}
+.media-heading {
+ margin-top: 0;
+ margin-bottom: 5px;
+}
+.media-list {
+ padding-left: 0;
+ list-style: none;
+}
+.list-group {
+ padding-left: 0;
+ margin-bottom: 20px;
+}
+.list-group-item {
+ position: relative;
+ display: block;
+ padding: 10px 15px;
+ margin-bottom: -1px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+}
+.list-group-item:first-child {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+}
+.list-group-item:last-child {
+ margin-bottom: 0;
+ border-bottom-right-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+a.list-group-item,
+button.list-group-item {
+ color: #555;
+}
+a.list-group-item .list-group-item-heading,
+button.list-group-item .list-group-item-heading {
+ color: #333;
+}
+a.list-group-item:hover,
+button.list-group-item:hover,
+a.list-group-item:focus,
+button.list-group-item:focus {
+ color: #555;
+ text-decoration: none;
+ background-color: #f5f5f5;
+}
+button.list-group-item {
+ width: 100%;
+ text-align: left;
+}
+.list-group-item.disabled,
+.list-group-item.disabled:hover,
+.list-group-item.disabled:focus {
+ color: #777;
+ cursor: not-allowed;
+ background-color: #eee;
+}
+.list-group-item.disabled .list-group-item-heading,
+.list-group-item.disabled:hover .list-group-item-heading,
+.list-group-item.disabled:focus .list-group-item-heading {
+ color: inherit;
+}
+.list-group-item.disabled .list-group-item-text,
+.list-group-item.disabled:hover .list-group-item-text,
+.list-group-item.disabled:focus .list-group-item-text {
+ color: #777;
+}
+.list-group-item.active,
+.list-group-item.active:hover,
+.list-group-item.active:focus {
+ z-index: 2;
+ color: #fff;
+ background-color: #337ab7;
+ border-color: #337ab7;
+}
+.list-group-item.active .list-group-item-heading,
+.list-group-item.active:hover .list-group-item-heading,
+.list-group-item.active:focus .list-group-item-heading,
+.list-group-item.active .list-group-item-heading > small,
+.list-group-item.active:hover .list-group-item-heading > small,
+.list-group-item.active:focus .list-group-item-heading > small,
+.list-group-item.active .list-group-item-heading > .small,
+.list-group-item.active:hover .list-group-item-heading > .small,
+.list-group-item.active:focus .list-group-item-heading > .small {
+ color: inherit;
+}
+.list-group-item.active .list-group-item-text,
+.list-group-item.active:hover .list-group-item-text,
+.list-group-item.active:focus .list-group-item-text {
+ color: #c7ddef;
+}
+.list-group-item-success {
+ color: #3c763d;
+ background-color: #dff0d8;
+}
+a.list-group-item-success,
+button.list-group-item-success {
+ color: #3c763d;
+}
+a.list-group-item-success .list-group-item-heading,
+button.list-group-item-success .list-group-item-heading {
+ color: inherit;
+}
+a.list-group-item-success:hover,
+button.list-group-item-success:hover,
+a.list-group-item-success:focus,
+button.list-group-item-success:focus {
+ color: #3c763d;
+ background-color: #d0e9c6;
+}
+a.list-group-item-success.active,
+button.list-group-item-success.active,
+a.list-group-item-success.active:hover,
+button.list-group-item-success.active:hover,
+a.list-group-item-success.active:focus,
+button.list-group-item-success.active:focus {
+ color: #fff;
+ background-color: #3c763d;
+ border-color: #3c763d;
+}
+.list-group-item-info {
+ color: #31708f;
+ background-color: #d9edf7;
+}
+a.list-group-item-info,
+button.list-group-item-info {
+ color: #31708f;
+}
+a.list-group-item-info .list-group-item-heading,
+button.list-group-item-info .list-group-item-heading {
+ color: inherit;
+}
+a.list-group-item-info:hover,
+button.list-group-item-info:hover,
+a.list-group-item-info:focus,
+button.list-group-item-info:focus {
+ color: #31708f;
+ background-color: #c4e3f3;
+}
+a.list-group-item-info.active,
+button.list-group-item-info.active,
+a.list-group-item-info.active:hover,
+button.list-group-item-info.active:hover,
+a.list-group-item-info.active:focus,
+button.list-group-item-info.active:focus {
+ color: #fff;
+ background-color: #31708f;
+ border-color: #31708f;
+}
+.list-group-item-warning {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+}
+a.list-group-item-warning,
+button.list-group-item-warning {
+ color: #8a6d3b;
+}
+a.list-group-item-warning .list-group-item-heading,
+button.list-group-item-warning .list-group-item-heading {
+ color: inherit;
+}
+a.list-group-item-warning:hover,
+button.list-group-item-warning:hover,
+a.list-group-item-warning:focus,
+button.list-group-item-warning:focus {
+ color: #8a6d3b;
+ background-color: #faf2cc;
+}
+a.list-group-item-warning.active,
+button.list-group-item-warning.active,
+a.list-group-item-warning.active:hover,
+button.list-group-item-warning.active:hover,
+a.list-group-item-warning.active:focus,
+button.list-group-item-warning.active:focus {
+ color: #fff;
+ background-color: #8a6d3b;
+ border-color: #8a6d3b;
+}
+.list-group-item-danger {
+ color: #a94442;
+ background-color: #f2dede;
+}
+a.list-group-item-danger,
+button.list-group-item-danger {
+ color: #a94442;
+}
+a.list-group-item-danger .list-group-item-heading,
+button.list-group-item-danger .list-group-item-heading {
+ color: inherit;
+}
+a.list-group-item-danger:hover,
+button.list-group-item-danger:hover,
+a.list-group-item-danger:focus,
+button.list-group-item-danger:focus {
+ color: #a94442;
+ background-color: #ebcccc;
+}
+a.list-group-item-danger.active,
+button.list-group-item-danger.active,
+a.list-group-item-danger.active:hover,
+button.list-group-item-danger.active:hover,
+a.list-group-item-danger.active:focus,
+button.list-group-item-danger.active:focus {
+ color: #fff;
+ background-color: #a94442;
+ border-color: #a94442;
+}
+.list-group-item-heading {
+ margin-top: 0;
+ margin-bottom: 5px;
+}
+.list-group-item-text {
+ margin-bottom: 0;
+ line-height: 1.3;
+}
+.panel {
+ margin-bottom: 20px;
+ background-color: #fff;
+ border: 1px solid transparent;
+ border-radius: 4px;
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
+ box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
+}
+.panel-body {
+ padding: 15px;
+}
+.panel-heading {
+ padding: 10px 15px;
+ border-bottom: 1px solid transparent;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+.panel-heading > .dropdown .dropdown-toggle {
+ color: inherit;
+}
+.panel-title {
+ margin-top: 0;
+ margin-bottom: 0;
+ font-size: 16px;
+ color: inherit;
+}
+.panel-title > a,
+.panel-title > small,
+.panel-title > .small,
+.panel-title > small > a,
+.panel-title > .small > a {
+ color: inherit;
+}
+.panel-footer {
+ padding: 10px 15px;
+ background-color: #f5f5f5;
+ border-top: 1px solid #ddd;
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.panel > .list-group,
+.panel > .panel-collapse > .list-group {
+ margin-bottom: 0;
+}
+.panel > .list-group .list-group-item,
+.panel > .panel-collapse > .list-group .list-group-item {
+ border-width: 1px 0;
+ border-radius: 0;
+}
+.panel > .list-group:first-child .list-group-item:first-child,
+.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
+ border-top: 0;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+.panel > .list-group:last-child .list-group-item:last-child,
+.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
+ border-bottom: 0;
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+.panel-heading + .list-group .list-group-item:first-child {
+ border-top-width: 0;
+}
+.list-group + .panel-footer {
+ border-top-width: 0;
+}
+.panel > .table,
+.panel > .table-responsive > .table,
+.panel > .panel-collapse > .table {
+ margin-bottom: 0;
+}
+.panel > .table caption,
+.panel > .table-responsive > .table caption,
+.panel > .panel-collapse > .table caption {
+ padding-right: 15px;
+ padding-left: 15px;
+}
+.panel > .table:first-child,
+.panel > .table-responsive:first-child > .table:first-child {
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
+.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
+ border-top-left-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
+.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
+ border-top-right-radius: 3px;
+}
+.panel > .table:last-child,
+.panel > .table-responsive:last-child > .table:last-child {
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
+.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
+ border-bottom-left-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
+.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
+ border-bottom-right-radius: 3px;
+}
+.panel > .panel-body + .table,
+.panel > .panel-body + .table-responsive,
+.panel > .table + .panel-body,
+.panel > .table-responsive + .panel-body {
+ border-top: 1px solid #ddd;
+}
+.panel > .table > tbody:first-child > tr:first-child th,
+.panel > .table > tbody:first-child > tr:first-child td {
+ border-top: 0;
+}
+.panel > .table-bordered,
+.panel > .table-responsive > .table-bordered {
+ border: 0;
+}
+.panel > .table-bordered > thead > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
+.panel > .table-bordered > tbody > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
+.panel > .table-bordered > tfoot > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
+.panel > .table-bordered > thead > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
+.panel > .table-bordered > tbody > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
+.panel > .table-bordered > tfoot > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+ border-left: 0;
+}
+.panel > .table-bordered > thead > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
+.panel > .table-bordered > tbody > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
+.panel > .table-bordered > tfoot > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
+.panel > .table-bordered > thead > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
+.panel > .table-bordered > tbody > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
+.panel > .table-bordered > tfoot > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+ border-right: 0;
+}
+.panel > .table-bordered > thead > tr:first-child > td,
+.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
+.panel > .table-bordered > tbody > tr:first-child > td,
+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
+.panel > .table-bordered > thead > tr:first-child > th,
+.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
+.panel > .table-bordered > tbody > tr:first-child > th,
+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
+ border-bottom: 0;
+}
+.panel > .table-bordered > tbody > tr:last-child > td,
+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
+.panel > .table-bordered > tfoot > tr:last-child > td,
+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
+.panel > .table-bordered > tbody > tr:last-child > th,
+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
+.panel > .table-bordered > tfoot > tr:last-child > th,
+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
+ border-bottom: 0;
+}
+.panel > .table-responsive {
+ margin-bottom: 0;
+ border: 0;
+}
+.panel-group {
+ margin-bottom: 20px;
+}
+.panel-group .panel {
+ margin-bottom: 0;
+ border-radius: 4px;
+}
+.panel-group .panel + .panel {
+ margin-top: 5px;
+}
+.panel-group .panel-heading {
+ border-bottom: 0;
+}
+.panel-group .panel-heading + .panel-collapse > .panel-body,
+.panel-group .panel-heading + .panel-collapse > .list-group {
+ border-top: 1px solid #ddd;
+}
+.panel-group .panel-footer {
+ border-top: 0;
+}
+.panel-group .panel-footer + .panel-collapse .panel-body {
+ border-bottom: 1px solid #ddd;
+}
+.panel-default {
+ border-color: #ddd;
+}
+.panel-default > .panel-heading {
+ color: #333;
+ background-color: #f5f5f5;
+ border-color: #ddd;
+}
+.panel-default > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #ddd;
+}
+.panel-default > .panel-heading .badge {
+ color: #f5f5f5;
+ background-color: #333;
+}
+.panel-default > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #ddd;
+}
+.panel-primary {
+ border-color: #337ab7;
+}
+.panel-primary > .panel-heading {
+ color: #fff;
+ background-color: #337ab7;
+ border-color: #337ab7;
+}
+.panel-primary > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #337ab7;
+}
+.panel-primary > .panel-heading .badge {
+ color: #337ab7;
+ background-color: #fff;
+}
+.panel-primary > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #337ab7;
+}
+.panel-success {
+ border-color: #d6e9c6;
+}
+.panel-success > .panel-heading {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+}
+.panel-success > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #d6e9c6;
+}
+.panel-success > .panel-heading .badge {
+ color: #dff0d8;
+ background-color: #3c763d;
+}
+.panel-success > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #d6e9c6;
+}
+.panel-info {
+ border-color: #bce8f1;
+}
+.panel-info > .panel-heading {
+ color: #31708f;
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+}
+.panel-info > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #bce8f1;
+}
+.panel-info > .panel-heading .badge {
+ color: #d9edf7;
+ background-color: #31708f;
+}
+.panel-info > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #bce8f1;
+}
+.panel-warning {
+ border-color: #faebcc;
+}
+.panel-warning > .panel-heading {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #faebcc;
+}
+.panel-warning > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #faebcc;
+}
+.panel-warning > .panel-heading .badge {
+ color: #fcf8e3;
+ background-color: #8a6d3b;
+}
+.panel-warning > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #faebcc;
+}
+.panel-danger {
+ border-color: #ebccd1;
+}
+.panel-danger > .panel-heading {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #ebccd1;
+}
+.panel-danger > .panel-heading + .panel-collapse > .panel-body {
+ border-top-color: #ebccd1;
+}
+.panel-danger > .panel-heading .badge {
+ color: #f2dede;
+ background-color: #a94442;
+}
+.panel-danger > .panel-footer + .panel-collapse > .panel-body {
+ border-bottom-color: #ebccd1;
+}
+.embed-responsive {
+ position: relative;
+ display: block;
+ height: 0;
+ padding: 0;
+ overflow: hidden;
+}
+.embed-responsive .embed-responsive-item,
+.embed-responsive iframe,
+.embed-responsive embed,
+.embed-responsive object,
+.embed-responsive video {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ border: 0;
+}
+.embed-responsive-16by9 {
+ padding-bottom: 56.25%;
+}
+.embed-responsive-4by3 {
+ padding-bottom: 75%;
+}
+.well {
+ min-height: 20px;
+ padding: 19px;
+ margin-bottom: 20px;
+ background-color: #f5f5f5;
+ border: 1px solid #e3e3e3;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
+}
+.well blockquote {
+ border-color: #ddd;
+ border-color: rgba(0, 0, 0, .15);
+}
+.well-lg {
+ padding: 24px;
+ border-radius: 6px;
+}
+.well-sm {
+ padding: 9px;
+ border-radius: 3px;
+}
+.close {
+ float: right;
+ font-size: 21px;
+ font-weight: bold;
+ line-height: 1;
+ color: #000;
+ text-shadow: 0 1px 0 #fff;
+ filter: alpha(opacity=20);
+ opacity: .2;
+}
+.close:hover,
+.close:focus {
+ color: #000;
+ text-decoration: none;
+ cursor: pointer;
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+button.close {
+ -webkit-appearance: none;
+ padding: 0;
+ cursor: pointer;
+ background: transparent;
+ border: 0;
+}
+.modal-open {
+ overflow: hidden;
+}
+.modal {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1050;
+ display: none;
+ overflow: hidden;
+ -webkit-overflow-scrolling: touch;
+ outline: 0;
+}
+.modal.fade .modal-dialog {
+ -webkit-transition: -webkit-transform .3s ease-out;
+ -o-transition: -o-transform .3s ease-out;
+ transition: transform .3s ease-out;
+ -webkit-transform: translate(0, -25%);
+ -ms-transform: translate(0, -25%);
+ -o-transform: translate(0, -25%);
+ transform: translate(0, -25%);
+}
+.modal.in .modal-dialog {
+ -webkit-transform: translate(0, 0);
+ -ms-transform: translate(0, 0);
+ -o-transform: translate(0, 0);
+ transform: translate(0, 0);
+}
+.modal-open .modal {
+ overflow-x: hidden;
+ overflow-y: auto;
+}
+.modal-dialog {
+ position: relative;
+ width: auto;
+ margin: 10px;
+}
+.modal-content {
+ position: relative;
+ background-color: #fff;
+ -webkit-background-clip: padding-box;
+ background-clip: padding-box;
+ border: 1px solid #999;
+ border: 1px solid rgba(0, 0, 0, .2);
+ border-radius: 6px;
+ outline: 0;
+ -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
+ box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
+}
+.modal-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1040;
+ background-color: #000;
+}
+.modal-backdrop.fade {
+ filter: alpha(opacity=0);
+ opacity: 0;
+}
+.modal-backdrop.in {
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+.modal-header {
+ padding: 15px;
+ border-bottom: 1px solid #e5e5e5;
+}
+.modal-header .close {
+ margin-top: -2px;
+}
+.modal-title {
+ margin: 0;
+ line-height: 1.42857143;
+}
+.modal-body {
+ position: relative;
+ padding: 15px;
+}
+.modal-footer {
+ padding: 15px;
+ text-align: right;
+ border-top: 1px solid #e5e5e5;
+}
+.modal-footer .btn + .btn {
+ margin-bottom: 0;
+ margin-left: 5px;
+}
+.modal-footer .btn-group .btn + .btn {
+ margin-left: -1px;
+}
+.modal-footer .btn-block + .btn-block {
+ margin-left: 0;
+}
+.modal-scrollbar-measure {
+ position: absolute;
+ top: -9999px;
+ width: 50px;
+ height: 50px;
+ overflow: scroll;
+}
+@media (min-width: 768px) {
+ .modal-dialog {
+ width: 600px;
+ margin: 30px auto;
+ }
+ .modal-content {
+ -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
+ box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
+ }
+ .modal-sm {
+ width: 300px;
+ }
+}
+@media (min-width: 992px) {
+ .modal-lg {
+ width: 900px;
+ }
+}
+.tooltip {
+ position: absolute;
+ z-index: 1070;
+ display: block;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 12px;
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1.42857143;
+ text-align: left;
+ text-align: start;
+ text-decoration: none;
+ text-shadow: none;
+ text-transform: none;
+ letter-spacing: normal;
+ word-break: normal;
+ word-spacing: normal;
+ word-wrap: normal;
+ white-space: normal;
+ filter: alpha(opacity=0);
+ opacity: 0;
+
+ line-break: auto;
+}
+.tooltip.in {
+ filter: alpha(opacity=90);
+ opacity: .9;
+}
+.tooltip.top {
+ padding: 5px 0;
+ margin-top: -3px;
+}
+.tooltip.right {
+ padding: 0 5px;
+ margin-left: 3px;
+}
+.tooltip.bottom {
+ padding: 5px 0;
+ margin-top: 3px;
+}
+.tooltip.left {
+ padding: 0 5px;
+ margin-left: -3px;
+}
+.tooltip-inner {
+ max-width: 200px;
+ padding: 3px 8px;
+ color: #fff;
+ text-align: center;
+ background-color: #000;
+ border-radius: 4px;
+}
+.tooltip-arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+}
+.tooltip.top .tooltip-arrow {
+ bottom: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000;
+}
+.tooltip.top-left .tooltip-arrow {
+ right: 5px;
+ bottom: 0;
+ margin-bottom: -5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000;
+}
+.tooltip.top-right .tooltip-arrow {
+ bottom: 0;
+ left: 5px;
+ margin-bottom: -5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000;
+}
+.tooltip.right .tooltip-arrow {
+ top: 50%;
+ left: 0;
+ margin-top: -5px;
+ border-width: 5px 5px 5px 0;
+ border-right-color: #000;
+}
+.tooltip.left .tooltip-arrow {
+ top: 50%;
+ right: 0;
+ margin-top: -5px;
+ border-width: 5px 0 5px 5px;
+ border-left-color: #000;
+}
+.tooltip.bottom .tooltip-arrow {
+ top: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000;
+}
+.tooltip.bottom-left .tooltip-arrow {
+ top: 0;
+ right: 5px;
+ margin-top: -5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000;
+}
+.tooltip.bottom-right .tooltip-arrow {
+ top: 0;
+ left: 5px;
+ margin-top: -5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000;
+}
+.popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1060;
+ display: none;
+ max-width: 276px;
+ padding: 1px;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 14px;
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1.42857143;
+ text-align: left;
+ text-align: start;
+ text-decoration: none;
+ text-shadow: none;
+ text-transform: none;
+ letter-spacing: normal;
+ word-break: normal;
+ word-spacing: normal;
+ word-wrap: normal;
+ white-space: normal;
+ background-color: #fff;
+ -webkit-background-clip: padding-box;
+ background-clip: padding-box;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, .2);
+ border-radius: 6px;
+ -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+ box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+
+ line-break: auto;
+}
+.popover.top {
+ margin-top: -10px;
+}
+.popover.right {
+ margin-left: 10px;
+}
+.popover.bottom {
+ margin-top: 10px;
+}
+.popover.left {
+ margin-left: -10px;
+}
+.popover-title {
+ padding: 8px 14px;
+ margin: 0;
+ font-size: 14px;
+ background-color: #f7f7f7;
+ border-bottom: 1px solid #ebebeb;
+ border-radius: 5px 5px 0 0;
+}
+.popover-content {
+ padding: 9px 14px;
+}
+.popover > .arrow,
+.popover > .arrow:after {
+ position: absolute;
+ display: block;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+}
+.popover > .arrow {
+ border-width: 11px;
+}
+.popover > .arrow:after {
+ content: "";
+ border-width: 10px;
+}
+.popover.top > .arrow {
+ bottom: -11px;
+ left: 50%;
+ margin-left: -11px;
+ border-top-color: #999;
+ border-top-color: rgba(0, 0, 0, .25);
+ border-bottom-width: 0;
+}
+.popover.top > .arrow:after {
+ bottom: 1px;
+ margin-left: -10px;
+ content: " ";
+ border-top-color: #fff;
+ border-bottom-width: 0;
+}
+.popover.right > .arrow {
+ top: 50%;
+ left: -11px;
+ margin-top: -11px;
+ border-right-color: #999;
+ border-right-color: rgba(0, 0, 0, .25);
+ border-left-width: 0;
+}
+.popover.right > .arrow:after {
+ bottom: -10px;
+ left: 1px;
+ content: " ";
+ border-right-color: #fff;
+ border-left-width: 0;
+}
+.popover.bottom > .arrow {
+ top: -11px;
+ left: 50%;
+ margin-left: -11px;
+ border-top-width: 0;
+ border-bottom-color: #999;
+ border-bottom-color: rgba(0, 0, 0, .25);
+}
+.popover.bottom > .arrow:after {
+ top: 1px;
+ margin-left: -10px;
+ content: " ";
+ border-top-width: 0;
+ border-bottom-color: #fff;
+}
+.popover.left > .arrow {
+ top: 50%;
+ right: -11px;
+ margin-top: -11px;
+ border-right-width: 0;
+ border-left-color: #999;
+ border-left-color: rgba(0, 0, 0, .25);
+}
+.popover.left > .arrow:after {
+ right: 1px;
+ bottom: -10px;
+ content: " ";
+ border-right-width: 0;
+ border-left-color: #fff;
+}
+.carousel {
+ position: relative;
+}
+.carousel-inner {
+ position: relative;
+ width: 100%;
+ overflow: hidden;
+}
+.carousel-inner > .item {
+ position: relative;
+ display: none;
+ -webkit-transition: .6s ease-in-out left;
+ -o-transition: .6s ease-in-out left;
+ transition: .6s ease-in-out left;
+}
+.carousel-inner > .item > img,
+.carousel-inner > .item > a > img {
+ line-height: 1;
+}
+@media all and (transform-3d), (-webkit-transform-3d) {
+ .carousel-inner > .item {
+ -webkit-transition: -webkit-transform .6s ease-in-out;
+ -o-transition: -o-transform .6s ease-in-out;
+ transition: transform .6s ease-in-out;
+
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-perspective: 1000px;
+ perspective: 1000px;
+ }
+ .carousel-inner > .item.next,
+ .carousel-inner > .item.active.right {
+ left: 0;
+ -webkit-transform: translate3d(100%, 0, 0);
+ transform: translate3d(100%, 0, 0);
+ }
+ .carousel-inner > .item.prev,
+ .carousel-inner > .item.active.left {
+ left: 0;
+ -webkit-transform: translate3d(-100%, 0, 0);
+ transform: translate3d(-100%, 0, 0);
+ }
+ .carousel-inner > .item.next.left,
+ .carousel-inner > .item.prev.right,
+ .carousel-inner > .item.active {
+ left: 0;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+}
+.carousel-inner > .active,
+.carousel-inner > .next,
+.carousel-inner > .prev {
+ display: block;
+}
+.carousel-inner > .active {
+ left: 0;
+}
+.carousel-inner > .next,
+.carousel-inner > .prev {
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+.carousel-inner > .next {
+ left: 100%;
+}
+.carousel-inner > .prev {
+ left: -100%;
+}
+.carousel-inner > .next.left,
+.carousel-inner > .prev.right {
+ left: 0;
+}
+.carousel-inner > .active.left {
+ left: -100%;
+}
+.carousel-inner > .active.right {
+ left: 100%;
+}
+.carousel-control {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ width: 15%;
+ font-size: 20px;
+ color: #fff;
+ text-align: center;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
+ background-color: rgba(0, 0, 0, 0);
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+.carousel-control.left {
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));
+ background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
+ background-repeat: repeat-x;
+}
+.carousel-control.right {
+ right: 0;
+ left: auto;
+ background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+ background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+ background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));
+ background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
+ background-repeat: repeat-x;
+}
+.carousel-control:hover,
+.carousel-control:focus {
+ color: #fff;
+ text-decoration: none;
+ filter: alpha(opacity=90);
+ outline: 0;
+ opacity: .9;
+}
+.carousel-control .icon-prev,
+.carousel-control .icon-next,
+.carousel-control .glyphicon-chevron-left,
+.carousel-control .glyphicon-chevron-right {
+ position: absolute;
+ top: 50%;
+ z-index: 5;
+ display: inline-block;
+ margin-top: -10px;
+}
+.carousel-control .icon-prev,
+.carousel-control .glyphicon-chevron-left {
+ left: 50%;
+ margin-left: -10px;
+}
+.carousel-control .icon-next,
+.carousel-control .glyphicon-chevron-right {
+ right: 50%;
+ margin-right: -10px;
+}
+.carousel-control .icon-prev,
+.carousel-control .icon-next {
+ width: 20px;
+ height: 20px;
+ font-family: serif;
+ line-height: 1;
+}
+.carousel-control .icon-prev:before {
+ content: '\2039';
+}
+.carousel-control .icon-next:before {
+ content: '\203a';
+}
+.carousel-indicators {
+ position: absolute;
+ bottom: 10px;
+ left: 50%;
+ z-index: 15;
+ width: 60%;
+ padding-left: 0;
+ margin-left: -30%;
+ text-align: center;
+ list-style: none;
+}
+.carousel-indicators li {
+ display: inline-block;
+ width: 10px;
+ height: 10px;
+ margin: 1px;
+ text-indent: -999px;
+ cursor: pointer;
+ background-color: #000 \9;
+ background-color: rgba(0, 0, 0, 0);
+ border: 1px solid #fff;
+ border-radius: 10px;
+}
+.carousel-indicators .active {
+ width: 12px;
+ height: 12px;
+ margin: 0;
+ background-color: #fff;
+}
+.carousel-caption {
+ position: absolute;
+ right: 15%;
+ bottom: 20px;
+ left: 15%;
+ z-index: 10;
+ padding-top: 20px;
+ padding-bottom: 20px;
+ color: #fff;
+ text-align: center;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
+}
+.carousel-caption .btn {
+ text-shadow: none;
+}
+@media screen and (min-width: 768px) {
+ .carousel-control .glyphicon-chevron-left,
+ .carousel-control .glyphicon-chevron-right,
+ .carousel-control .icon-prev,
+ .carousel-control .icon-next {
+ width: 30px;
+ height: 30px;
+ margin-top: -10px;
+ font-size: 30px;
+ }
+ .carousel-control .glyphicon-chevron-left,
+ .carousel-control .icon-prev {
+ margin-left: -10px;
+ }
+ .carousel-control .glyphicon-chevron-right,
+ .carousel-control .icon-next {
+ margin-right: -10px;
+ }
+ .carousel-caption {
+ right: 20%;
+ left: 20%;
+ padding-bottom: 30px;
+ }
+ .carousel-indicators {
+ bottom: 20px;
+ }
+}
+.clearfix:before,
+.clearfix:after,
+.dl-horizontal dd:before,
+.dl-horizontal dd:after,
+.container:before,
+.container:after,
+.container-fluid:before,
+.container-fluid:after,
+.row:before,
+.row:after,
+.form-horizontal .form-group:before,
+.form-horizontal .form-group:after,
+.btn-toolbar:before,
+.btn-toolbar:after,
+.btn-group-vertical > .btn-group:before,
+.btn-group-vertical > .btn-group:after,
+.nav:before,
+.nav:after,
+.navbar:before,
+.navbar:after,
+.navbar-header:before,
+.navbar-header:after,
+.navbar-collapse:before,
+.navbar-collapse:after,
+.pager:before,
+.pager:after,
+.panel-body:before,
+.panel-body:after,
+.modal-header:before,
+.modal-header:after,
+.modal-footer:before,
+.modal-footer:after {
+ display: table;
+ content: " ";
+}
+.clearfix:after,
+.dl-horizontal dd:after,
+.container:after,
+.container-fluid:after,
+.row:after,
+.form-horizontal .form-group:after,
+.btn-toolbar:after,
+.btn-group-vertical > .btn-group:after,
+.nav:after,
+.navbar:after,
+.navbar-header:after,
+.navbar-collapse:after,
+.pager:after,
+.panel-body:after,
+.modal-header:after,
+.modal-footer:after {
+ clear: both;
+}
+.center-block {
+ display: block;
+ margin-right: auto;
+ margin-left: auto;
+}
+.pull-right {
+ float: right !important;
+}
+.pull-left {
+ float: left !important;
+}
+.hide {
+ display: none !important;
+}
+.show {
+ display: block !important;
+}
+.invisible {
+ visibility: hidden;
+}
+.text-hide {
+ font: 0/0 a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0;
+}
+.hidden {
+ display: none !important;
+}
+.affix {
+ position: fixed;
+}
+@-ms-viewport {
+ width: device-width;
+}
+.visible-xs,
+.visible-sm,
+.visible-md,
+.visible-lg {
+ display: none !important;
+}
+.visible-xs-block,
+.visible-xs-inline,
+.visible-xs-inline-block,
+.visible-sm-block,
+.visible-sm-inline,
+.visible-sm-inline-block,
+.visible-md-block,
+.visible-md-inline,
+.visible-md-inline-block,
+.visible-lg-block,
+.visible-lg-inline,
+.visible-lg-inline-block {
+ display: none !important;
+}
+@media (max-width: 767px) {
+ .visible-xs {
+ display: block !important;
+ }
+ table.visible-xs {
+ display: table !important;
+ }
+ tr.visible-xs {
+ display: table-row !important;
+ }
+ th.visible-xs,
+ td.visible-xs {
+ display: table-cell !important;
+ }
+}
+@media (max-width: 767px) {
+ .visible-xs-block {
+ display: block !important;
+ }
+}
+@media (max-width: 767px) {
+ .visible-xs-inline {
+ display: inline !important;
+ }
+}
+@media (max-width: 767px) {
+ .visible-xs-inline-block {
+ display: inline-block !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm {
+ display: block !important;
+ }
+ table.visible-sm {
+ display: table !important;
+ }
+ tr.visible-sm {
+ display: table-row !important;
+ }
+ th.visible-sm,
+ td.visible-sm {
+ display: table-cell !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm-block {
+ display: block !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm-inline {
+ display: inline !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm-inline-block {
+ display: inline-block !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md {
+ display: block !important;
+ }
+ table.visible-md {
+ display: table !important;
+ }
+ tr.visible-md {
+ display: table-row !important;
+ }
+ th.visible-md,
+ td.visible-md {
+ display: table-cell !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md-block {
+ display: block !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md-inline {
+ display: inline !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md-inline-block {
+ display: inline-block !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg {
+ display: block !important;
+ }
+ table.visible-lg {
+ display: table !important;
+ }
+ tr.visible-lg {
+ display: table-row !important;
+ }
+ th.visible-lg,
+ td.visible-lg {
+ display: table-cell !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg-block {
+ display: block !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg-inline {
+ display: inline !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg-inline-block {
+ display: inline-block !important;
+ }
+}
+@media (max-width: 767px) {
+ .hidden-xs {
+ display: none !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .hidden-sm {
+ display: none !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .hidden-md {
+ display: none !important;
+ }
+}
+@media (min-width: 1200px) {
+ .hidden-lg {
+ display: none !important;
+ }
+}
+.visible-print {
+ display: none !important;
+}
+@media print {
+ .visible-print {
+ display: block !important;
+ }
+ table.visible-print {
+ display: table !important;
+ }
+ tr.visible-print {
+ display: table-row !important;
+ }
+ th.visible-print,
+ td.visible-print {
+ display: table-cell !important;
+ }
+}
+.visible-print-block {
+ display: none !important;
+}
+@media print {
+ .visible-print-block {
+ display: block !important;
+ }
+}
+.visible-print-inline {
+ display: none !important;
+}
+@media print {
+ .visible-print-inline {
+ display: inline !important;
+ }
+}
+.visible-print-inline-block {
+ display: none !important;
+}
+@media print {
+ .visible-print-inline-block {
+ display: inline-block !important;
+ }
+}
+@media print {
+ .hidden-print {
+ display: none !important;
+ }
+}
+/*# sourceMappingURL=bootstrap.css.map */
diff --git a/GitCandy.Web/Content/bootstrap.css.map b/GitCandy.Web/Content/bootstrap.css.map
new file mode 100644
index 0000000..f010c82
--- /dev/null
+++ b/GitCandy.Web/Content/bootstrap.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/mixins/reset-text.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,4EAA4E;ACG5E;EACE,wBAAA;EACA,2BAAA;EACA,+BAAA;CDDD;ACQD;EACE,UAAA;CDND;ACmBD;;;;;;;;;;;;;EAaE,eAAA;CDjBD;ACyBD;;;;EAIE,sBAAA;EACA,yBAAA;CDvBD;AC+BD;EACE,cAAA;EACA,UAAA;CD7BD;ACqCD;;EAEE,cAAA;CDnCD;AC6CD;EACE,8BAAA;CD3CD;ACmDD;;EAEE,WAAA;CDjDD;AC2DD;EACE,0BAAA;CDzDD;ACgED;;EAEE,kBAAA;CD9DD;ACqED;EACE,mBAAA;CDnED;AC2ED;EACE,eAAA;EACA,iBAAA;CDzED;ACgFD;EACE,iBAAA;EACA,YAAA;CD9ED;ACqFD;EACE,eAAA;CDnFD;AC0FD;;EAEE,eAAA;EACA,eAAA;EACA,mBAAA;EACA,yBAAA;CDxFD;AC2FD;EACE,YAAA;CDzFD;AC4FD;EACE,gBAAA;CD1FD;ACoGD;EACE,UAAA;CDlGD;ACyGD;EACE,iBAAA;CDvGD;ACiHD;EACE,iBAAA;CD/GD;ACsHD;EACE,gCAAA;KAAA,6BAAA;UAAA,wBAAA;EACA,UAAA;CDpHD;AC2HD;EACE,eAAA;CDzHD;ACgID;;;;EAIE,kCAAA;EACA,eAAA;CD9HD;ACgJD;;;;;EAKE,eAAA;EACA,cAAA;EACA,UAAA;CD9ID;ACqJD;EACE,kBAAA;CDnJD;AC6JD;;EAEE,qBAAA;CD3JD;ACsKD;;;;EAIE,2BAAA;EACA,gBAAA;CDpKD;AC2KD;;EAEE,gBAAA;CDzKD;ACgLD;;EAEE,UAAA;EACA,WAAA;CD9KD;ACsLD;EACE,oBAAA;CDpLD;AC+LD;;EAEE,+BAAA;KAAA,4BAAA;UAAA,uBAAA;EACA,WAAA;CD7LD;ACsMD;;EAEE,aAAA;CDpMD;AC4MD;EACE,8BAAA;EACA,gCAAA;KAAA,6BAAA;UAAA,wBAAA;CD1MD;ACmND;;EAEE,yBAAA;CDjND;ACwND;EACE,0BAAA;EACA,cAAA;EACA,+BAAA;CDtND;AC8ND;EACE,UAAA;EACA,WAAA;CD5ND;ACmOD;EACE,eAAA;CDjOD;ACyOD;EACE,kBAAA;CDvOD;ACiPD;EACE,0BAAA;EACA,kBAAA;CD/OD;ACkPD;;EAEE,WAAA;CDhPD;AACD,qFAAqF;AElFrF;EA7FI;;;IAGI,mCAAA;IACA,uBAAA;IACA,oCAAA;YAAA,4BAAA;IACA,6BAAA;GFkLL;EE/KC;;IAEI,2BAAA;GFiLL;EE9KC;IACI,6BAAA;GFgLL;EE7KC;IACI,8BAAA;GF+KL;EE1KC;;IAEI,YAAA;GF4KL;EEzKC;;IAEI,uBAAA;IACA,yBAAA;GF2KL;EExKC;IACI,4BAAA;GF0KL;EEvKC;;IAEI,yBAAA;GFyKL;EEtKC;IACI,2BAAA;GFwKL;EErKC;;;IAGI,WAAA;IACA,UAAA;GFuKL;EEpKC;;IAEI,wBAAA;GFsKL;EEhKC;IACI,cAAA;GFkKL;EEhKC;;IAGQ,kCAAA;GFiKT;EE9JC;IACI,uBAAA;GFgKL;EE7JC;IACI,qCAAA;GF+JL;EEhKC;;IAKQ,kCAAA;GF+JT;EE5JC;;IAGQ,kCAAA;GF6JT;CACF;AGnPD;EACE,oCAAA;EACA,sDAAA;EACA,gYAAA;CHqPD;AG7OD;EACE,mBAAA;EACA,SAAA;EACA,sBAAA;EACA,oCAAA;EACA,mBAAA;EACA,oBAAA;EACA,eAAA;EACA,oCAAA;EACA,mCAAA;CH+OD;AG3OmC;EAAW,iBAAA;CH8O9C;AG7OmC;EAAW,iBAAA;CHgP9C;AG9OmC;;EAAW,iBAAA;CHkP9C;AGjPmC;EAAW,iBAAA;CHoP9C;AGnPmC;EAAW,iBAAA;CHsP9C;AGrPmC;EAAW,iBAAA;CHwP9C;AGvPmC;EAAW,iBAAA;CH0P9C;AGzPmC;EAAW,iBAAA;CH4P9C;AG3PmC;EAAW,iBAAA;CH8P9C;AG7PmC;EAAW,iBAAA;CHgQ9C;AG/PmC;EAAW,iBAAA;CHkQ9C;AGjQmC;EAAW,iBAAA;CHoQ9C;AGnQmC;EAAW,iBAAA;CHsQ9C;AGrQmC;EAAW,iBAAA;CHwQ9C;AGvQmC;EAAW,iBAAA;CH0Q9C;AGzQmC;EAAW,iBAAA;CH4Q9C;AG3QmC;EAAW,iBAAA;CH8Q9C;AG7QmC;EAAW,iBAAA;CHgR9C;AG/QmC;EAAW,iBAAA;CHkR9C;AGjRmC;EAAW,iBAAA;CHoR9C;AGnRmC;EAAW,iBAAA;CHsR9C;AGrRmC;EAAW,iBAAA;CHwR9C;AGvRmC;EAAW,iBAAA;CH0R9C;AGzRmC;EAAW,iBAAA;CH4R9C;AG3RmC;EAAW,iBAAA;CH8R9C;AG7RmC;EAAW,iBAAA;CHgS9C;AG/RmC;EAAW,iBAAA;CHkS9C;AGjSmC;EAAW,iBAAA;CHoS9C;AGnSmC;EAAW,iBAAA;CHsS9C;AGrSmC;EAAW,iBAAA;CHwS9C;AGvSmC;EAAW,iBAAA;CH0S9C;AGzSmC;EAAW,iBAAA;CH4S9C;AG3SmC;EAAW,iBAAA;CH8S9C;AG7SmC;EAAW,iBAAA;CHgT9C;AG/SmC;EAAW,iBAAA;CHkT9C;AGjTmC;EAAW,iBAAA;CHoT9C;AGnTmC;EAAW,iBAAA;CHsT9C;AGrTmC;EAAW,iBAAA;CHwT9C;AGvTmC;EAAW,iBAAA;CH0T9C;AGzTmC;EAAW,iBAAA;CH4T9C;AG3TmC;EAAW,iBAAA;CH8T9C;AG7TmC;EAAW,iBAAA;CHgU9C;AG/TmC;EAAW,iBAAA;CHkU9C;AGjUmC;EAAW,iBAAA;CHoU9C;AGnUmC;EAAW,iBAAA;CHsU9C;AGrUmC;EAAW,iBAAA;CHwU9C;AGvUmC;EAAW,iBAAA;CH0U9C;AGzUmC;EAAW,iBAAA;CH4U9C;AG3UmC;EAAW,iBAAA;CH8U9C;AG7UmC;EAAW,iBAAA;CHgV9C;AG/UmC;EAAW,iBAAA;CHkV9C;AGjVmC;EAAW,iBAAA;CHoV9C;AGnVmC;EAAW,iBAAA;CHsV9C;AGrVmC;EAAW,iBAAA;CHwV9C;AGvVmC;EAAW,iBAAA;CH0V9C;AGzVmC;EAAW,iBAAA;CH4V9C;AG3VmC;EAAW,iBAAA;CH8V9C;AG7VmC;EAAW,iBAAA;CHgW9C;AG/VmC;EAAW,iBAAA;CHkW9C;AGjWmC;EAAW,iBAAA;CHoW9C;AGnWmC;EAAW,iBAAA;CHsW9C;AGrWmC;EAAW,iBAAA;CHwW9C;AGvWmC;EAAW,iBAAA;CH0W9C;AGzWmC;EAAW,iBAAA;CH4W9C;AG3WmC;EAAW,iBAAA;CH8W9C;AG7WmC;EAAW,iBAAA;CHgX9C;AG/WmC;EAAW,iBAAA;CHkX9C;AGjXmC;EAAW,iBAAA;CHoX9C;AGnXmC;EAAW,iBAAA;CHsX9C;AGrXmC;EAAW,iBAAA;CHwX9C;AGvXmC;EAAW,iBAAA;CH0X9C;AGzXmC;EAAW,iBAAA;CH4X9C;AG3XmC;EAAW,iBAAA;CH8X9C;AG7XmC;EAAW,iBAAA;CHgY9C;AG/XmC;EAAW,iBAAA;CHkY9C;AGjYmC;EAAW,iBAAA;CHoY9C;AGnYmC;EAAW,iBAAA;CHsY9C;AGrYmC;EAAW,iBAAA;CHwY9C;AGvYmC;EAAW,iBAAA;CH0Y9C;AGzYmC;EAAW,iBAAA;CH4Y9C;AG3YmC;EAAW,iBAAA;CH8Y9C;AG7YmC;EAAW,iBAAA;CHgZ9C;AG/YmC;EAAW,iBAAA;CHkZ9C;AGjZmC;EAAW,iBAAA;CHoZ9C;AGnZmC;EAAW,iBAAA;CHsZ9C;AGrZmC;EAAW,iBAAA;CHwZ9C;AGvZmC;EAAW,iBAAA;CH0Z9C;AGzZmC;EAAW,iBAAA;CH4Z9C;AG3ZmC;EAAW,iBAAA;CH8Z9C;AG7ZmC;EAAW,iBAAA;CHga9C;AG/ZmC;EAAW,iBAAA;CHka9C;AGjamC;EAAW,iBAAA;CHoa9C;AGnamC;EAAW,iBAAA;CHsa9C;AGramC;EAAW,iBAAA;CHwa9C;AGvamC;EAAW,iBAAA;CH0a9C;AGzamC;EAAW,iBAAA;CH4a9C;AG3amC;EAAW,iBAAA;CH8a9C;AG7amC;EAAW,iBAAA;CHgb9C;AG/amC;EAAW,iBAAA;CHkb9C;AGjbmC;EAAW,iBAAA;CHob9C;AGnbmC;EAAW,iBAAA;CHsb9C;AGrbmC;EAAW,iBAAA;CHwb9C;AGvbmC;EAAW,iBAAA;CH0b9C;AGzbmC;EAAW,iBAAA;CH4b9C;AG3bmC;EAAW,iBAAA;CH8b9C;AG7bmC;EAAW,iBAAA;CHgc9C;AG/bmC;EAAW,iBAAA;CHkc9C;AGjcmC;EAAW,iBAAA;CHoc9C;AGncmC;EAAW,iBAAA;CHsc9C;AGrcmC;EAAW,iBAAA;CHwc9C;AGvcmC;EAAW,iBAAA;CH0c9C;AGzcmC;EAAW,iBAAA;CH4c9C;AG3cmC;EAAW,iBAAA;CH8c9C;AG7cmC;EAAW,iBAAA;CHgd9C;AG/cmC;EAAW,iBAAA;CHkd9C;AGjdmC;EAAW,iBAAA;CHod9C;AGndmC;EAAW,iBAAA;CHsd9C;AGrdmC;EAAW,iBAAA;CHwd9C;AGvdmC;EAAW,iBAAA;CH0d9C;AGzdmC;EAAW,iBAAA;CH4d9C;AG3dmC;EAAW,iBAAA;CH8d9C;AG7dmC;EAAW,iBAAA;CHge9C;AG/dmC;EAAW,iBAAA;CHke9C;AGjemC;EAAW,iBAAA;CHoe9C;AGnemC;EAAW,iBAAA;CHse9C;AGremC;EAAW,iBAAA;CHwe9C;AGvemC;EAAW,iBAAA;CH0e9C;AGzemC;EAAW,iBAAA;CH4e9C;AG3emC;EAAW,iBAAA;CH8e9C;AG7emC;EAAW,iBAAA;CHgf9C;AG/emC;EAAW,iBAAA;CHkf9C;AGjfmC;EAAW,iBAAA;CHof9C;AGnfmC;EAAW,iBAAA;CHsf9C;AGrfmC;EAAW,iBAAA;CHwf9C;AGvfmC;EAAW,iBAAA;CH0f9C;AGzfmC;EAAW,iBAAA;CH4f9C;AG3fmC;EAAW,iBAAA;CH8f9C;AG7fmC;EAAW,iBAAA;CHggB9C;AG/fmC;EAAW,iBAAA;CHkgB9C;AGjgBmC;EAAW,iBAAA;CHogB9C;AGngBmC;EAAW,iBAAA;CHsgB9C;AGrgBmC;EAAW,iBAAA;CHwgB9C;AGvgBmC;EAAW,iBAAA;CH0gB9C;AGzgBmC;EAAW,iBAAA;CH4gB9C;AG3gBmC;EAAW,iBAAA;CH8gB9C;AG7gBmC;EAAW,iBAAA;CHghB9C;AG/gBmC;EAAW,iBAAA;CHkhB9C;AGjhBmC;EAAW,iBAAA;CHohB9C;AGnhBmC;EAAW,iBAAA;CHshB9C;AGrhBmC;EAAW,iBAAA;CHwhB9C;AGvhBmC;EAAW,iBAAA;CH0hB9C;AGzhBmC;EAAW,iBAAA;CH4hB9C;AG3hBmC;EAAW,iBAAA;CH8hB9C;AG7hBmC;EAAW,iBAAA;CHgiB9C;AG/hBmC;EAAW,iBAAA;CHkiB9C;AGjiBmC;EAAW,iBAAA;CHoiB9C;AGniBmC;EAAW,iBAAA;CHsiB9C;AGriBmC;EAAW,iBAAA;CHwiB9C;AGviBmC;EAAW,iBAAA;CH0iB9C;AGziBmC;EAAW,iBAAA;CH4iB9C;AG3iBmC;EAAW,iBAAA;CH8iB9C;AG7iBmC;EAAW,iBAAA;CHgjB9C;AG/iBmC;EAAW,iBAAA;CHkjB9C;AGjjBmC;EAAW,iBAAA;CHojB9C;AGnjBmC;EAAW,iBAAA;CHsjB9C;AGrjBmC;EAAW,iBAAA;CHwjB9C;AGvjBmC;EAAW,iBAAA;CH0jB9C;AGzjBmC;EAAW,iBAAA;CH4jB9C;AG3jBmC;EAAW,iBAAA;CH8jB9C;AG7jBmC;EAAW,iBAAA;CHgkB9C;AG/jBmC;EAAW,iBAAA;CHkkB9C;AGjkBmC;EAAW,iBAAA;CHokB9C;AGnkBmC;EAAW,iBAAA;CHskB9C;AGrkBmC;EAAW,iBAAA;CHwkB9C;AGvkBmC;EAAW,iBAAA;CH0kB9C;AGzkBmC;EAAW,iBAAA;CH4kB9C;AG3kBmC;EAAW,iBAAA;CH8kB9C;AG7kBmC;EAAW,iBAAA;CHglB9C;AG/kBmC;EAAW,iBAAA;CHklB9C;AGjlBmC;EAAW,iBAAA;CHolB9C;AGnlBmC;EAAW,iBAAA;CHslB9C;AGrlBmC;EAAW,iBAAA;CHwlB9C;AGvlBmC;EAAW,iBAAA;CH0lB9C;AGzlBmC;EAAW,iBAAA;CH4lB9C;AG3lBmC;EAAW,iBAAA;CH8lB9C;AG7lBmC;EAAW,iBAAA;CHgmB9C;AG/lBmC;EAAW,iBAAA;CHkmB9C;AGjmBmC;EAAW,iBAAA;CHomB9C;AGnmBmC;EAAW,iBAAA;CHsmB9C;AGrmBmC;EAAW,iBAAA;CHwmB9C;AGvmBmC;EAAW,iBAAA;CH0mB9C;AGzmBmC;EAAW,iBAAA;CH4mB9C;AG3mBmC;EAAW,iBAAA;CH8mB9C;AG7mBmC;EAAW,iBAAA;CHgnB9C;AG/mBmC;EAAW,iBAAA;CHknB9C;AGjnBmC;EAAW,iBAAA;CHonB9C;AGnnBmC;EAAW,iBAAA;CHsnB9C;AGrnBmC;EAAW,iBAAA;CHwnB9C;AGvnBmC;EAAW,iBAAA;CH0nB9C;AGznBmC;EAAW,iBAAA;CH4nB9C;AG3nBmC;EAAW,iBAAA;CH8nB9C;AG7nBmC;EAAW,iBAAA;CHgoB9C;AG/nBmC;EAAW,iBAAA;CHkoB9C;AGjoBmC;EAAW,iBAAA;CHooB9C;AGnoBmC;EAAW,iBAAA;CHsoB9C;AGroBmC;EAAW,iBAAA;CHwoB9C;AG/nBmC;EAAW,iBAAA;CHkoB9C;AGjoBmC;EAAW,iBAAA;CHooB9C;AGnoBmC;EAAW,iBAAA;CHsoB9C;AGroBmC;EAAW,iBAAA;CHwoB9C;AGvoBmC;EAAW,iBAAA;CH0oB9C;AGzoBmC;EAAW,iBAAA;CH4oB9C;AG3oBmC;EAAW,iBAAA;CH8oB9C;AG7oBmC;EAAW,iBAAA;CHgpB9C;AG/oBmC;EAAW,iBAAA;CHkpB9C;AGjpBmC;EAAW,iBAAA;CHopB9C;AGnpBmC;EAAW,iBAAA;CHspB9C;AGrpBmC;EAAW,iBAAA;CHwpB9C;AGvpBmC;EAAW,iBAAA;CH0pB9C;AGzpBmC;EAAW,iBAAA;CH4pB9C;AG3pBmC;EAAW,iBAAA;CH8pB9C;AG7pBmC;EAAW,iBAAA;CHgqB9C;AG/pBmC;EAAW,iBAAA;CHkqB9C;AGjqBmC;EAAW,iBAAA;CHoqB9C;AGnqBmC;EAAW,iBAAA;CHsqB9C;AGrqBmC;EAAW,iBAAA;CHwqB9C;AGvqBmC;EAAW,iBAAA;CH0qB9C;AGzqBmC;EAAW,iBAAA;CH4qB9C;AG3qBmC;EAAW,iBAAA;CH8qB9C;AG7qBmC;EAAW,iBAAA;CHgrB9C;AG/qBmC;EAAW,iBAAA;CHkrB9C;AGjrBmC;EAAW,iBAAA;CHorB9C;AGnrBmC;EAAW,iBAAA;CHsrB9C;AGrrBmC;EAAW,iBAAA;CHwrB9C;AGvrBmC;EAAW,iBAAA;CH0rB9C;AGzrBmC;EAAW,iBAAA;CH4rB9C;AG3rBmC;EAAW,iBAAA;CH8rB9C;AG7rBmC;EAAW,iBAAA;CHgsB9C;AG/rBmC;EAAW,iBAAA;CHksB9C;AGjsBmC;EAAW,iBAAA;CHosB9C;AGnsBmC;EAAW,iBAAA;CHssB9C;AGrsBmC;EAAW,iBAAA;CHwsB9C;AGvsBmC;EAAW,iBAAA;CH0sB9C;AGzsBmC;EAAW,iBAAA;CH4sB9C;AG3sBmC;EAAW,iBAAA;CH8sB9C;AG7sBmC;EAAW,iBAAA;CHgtB9C;AG/sBmC;EAAW,iBAAA;CHktB9C;AGjtBmC;EAAW,iBAAA;CHotB9C;AGntBmC;EAAW,iBAAA;CHstB9C;AGrtBmC;EAAW,iBAAA;CHwtB9C;AGvtBmC;EAAW,iBAAA;CH0tB9C;AGztBmC;EAAW,iBAAA;CH4tB9C;AG3tBmC;EAAW,iBAAA;CH8tB9C;AG7tBmC;EAAW,iBAAA;CHguB9C;AG/tBmC;EAAW,iBAAA;CHkuB9C;AGjuBmC;EAAW,iBAAA;CHouB9C;AGnuBmC;EAAW,iBAAA;CHsuB9C;AGruBmC;EAAW,iBAAA;CHwuB9C;AGvuBmC;EAAW,iBAAA;CH0uB9C;AGzuBmC;EAAW,iBAAA;CH4uB9C;AG3uBmC;EAAW,iBAAA;CH8uB9C;AG7uBmC;EAAW,iBAAA;CHgvB9C;AIthCD;ECgEE,+BAAA;EACG,4BAAA;EACK,uBAAA;CLy9BT;AIxhCD;;EC6DE,+BAAA;EACG,4BAAA;EACK,uBAAA;CL+9BT;AIthCD;EACE,gBAAA;EACA,8CAAA;CJwhCD;AIrhCD;EACE,4DAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,uBAAA;CJuhCD;AInhCD;;;;EAIE,qBAAA;EACA,mBAAA;EACA,qBAAA;CJqhCD;AI/gCD;EACE,eAAA;EACA,sBAAA;CJihCD;AI/gCC;;EAEE,eAAA;EACA,2BAAA;CJihCH;AI9gCC;EEnDA,2CAAA;EACA,qBAAA;CNokCD;AIvgCD;EACE,UAAA;CJygCD;AIngCD;EACE,uBAAA;CJqgCD;AIjgCD;;;;;EGvEE,eAAA;EACA,gBAAA;EACA,aAAA;CP+kCD;AIrgCD;EACE,mBAAA;CJugCD;AIjgCD;EACE,aAAA;EACA,wBAAA;EACA,uBAAA;EACA,uBAAA;EACA,mBAAA;EC6FA,yCAAA;EACK,oCAAA;EACG,iCAAA;EEvLR,sBAAA;EACA,gBAAA;EACA,aAAA;CP+lCD;AIjgCD;EACE,mBAAA;CJmgCD;AI7/BD;EACE,iBAAA;EACA,oBAAA;EACA,UAAA;EACA,8BAAA;CJ+/BD;AIv/BD;EACE,mBAAA;EACA,WAAA;EACA,YAAA;EACA,aAAA;EACA,WAAA;EACA,iBAAA;EACA,uBAAA;EACA,UAAA;CJy/BD;AIj/BC;;EAEE,iBAAA;EACA,YAAA;EACA,aAAA;EACA,UAAA;EACA,kBAAA;EACA,WAAA;CJm/BH;AIx+BD;EACE,gBAAA;CJ0+BD;AQjoCD;;;;;;;;;;;;EAEE,qBAAA;EACA,iBAAA;EACA,iBAAA;EACA,eAAA;CR6oCD;AQlpCD;;;;;;;;;;;;;;;;;;;;;;;;EASI,oBAAA;EACA,eAAA;EACA,eAAA;CRmqCH;AQ/pCD;;;;;;EAGE,iBAAA;EACA,oBAAA;CRoqCD;AQxqCD;;;;;;;;;;;;EAQI,eAAA;CR8qCH;AQ3qCD;;;;;;EAGE,iBAAA;EACA,oBAAA;CRgrCD;AQprCD;;;;;;;;;;;;EAQI,eAAA;CR0rCH;AQtrCD;;EAAU,gBAAA;CR0rCT;AQzrCD;;EAAU,gBAAA;CR6rCT;AQ5rCD;;EAAU,gBAAA;CRgsCT;AQ/rCD;;EAAU,gBAAA;CRmsCT;AQlsCD;;EAAU,gBAAA;CRssCT;AQrsCD;;EAAU,gBAAA;CRysCT;AQnsCD;EACE,iBAAA;CRqsCD;AQlsCD;EACE,oBAAA;EACA,gBAAA;EACA,iBAAA;EACA,iBAAA;CRosCD;AQ/rCD;EAwOA;IA1OI,gBAAA;GRqsCD;CACF;AQ7rCD;;EAEE,eAAA;CR+rCD;AQ5rCD;;EAEE,0BAAA;EACA,cAAA;CR8rCD;AQ1rCD;EAAuB,iBAAA;CR6rCtB;AQ5rCD;EAAuB,kBAAA;CR+rCtB;AQ9rCD;EAAuB,mBAAA;CRisCtB;AQhsCD;EAAuB,oBAAA;CRmsCtB;AQlsCD;EAAuB,oBAAA;CRqsCtB;AQlsCD;EAAuB,0BAAA;CRqsCtB;AQpsCD;EAAuB,0BAAA;CRusCtB;AQtsCD;EAAuB,2BAAA;CRysCtB;AQtsCD;EACE,eAAA;CRwsCD;AQtsCD;ECrGE,eAAA;CT8yCD;AS7yCC;;EAEE,eAAA;CT+yCH;AQ1sCD;ECxGE,eAAA;CTqzCD;ASpzCC;;EAEE,eAAA;CTszCH;AQ9sCD;EC3GE,eAAA;CT4zCD;AS3zCC;;EAEE,eAAA;CT6zCH;AQltCD;EC9GE,eAAA;CTm0CD;ASl0CC;;EAEE,eAAA;CTo0CH;AQttCD;ECjHE,eAAA;CT00CD;ASz0CC;;EAEE,eAAA;CT20CH;AQttCD;EAGE,YAAA;EE3HA,0BAAA;CVk1CD;AUj1CC;;EAEE,0BAAA;CVm1CH;AQxtCD;EE9HE,0BAAA;CVy1CD;AUx1CC;;EAEE,0BAAA;CV01CH;AQ5tCD;EEjIE,0BAAA;CVg2CD;AU/1CC;;EAEE,0BAAA;CVi2CH;AQhuCD;EEpIE,0BAAA;CVu2CD;AUt2CC;;EAEE,0BAAA;CVw2CH;AQpuCD;EEvIE,0BAAA;CV82CD;AU72CC;;EAEE,0BAAA;CV+2CH;AQnuCD;EACE,oBAAA;EACA,oBAAA;EACA,iCAAA;CRquCD;AQ7tCD;;EAEE,cAAA;EACA,oBAAA;CR+tCD;AQluCD;;;;EAMI,iBAAA;CRkuCH;AQ3tCD;EACE,gBAAA;EACA,iBAAA;CR6tCD;AQztCD;EALE,gBAAA;EACA,iBAAA;EAMA,kBAAA;CR4tCD;AQ9tCD;EAKI,sBAAA;EACA,kBAAA;EACA,mBAAA;CR4tCH;AQvtCD;EACE,cAAA;EACA,oBAAA;CRytCD;AQvtCD;;EAEE,wBAAA;CRytCD;AQvtCD;EACE,kBAAA;CRytCD;AQvtCD;EACE,eAAA;CRytCD;AQhsCD;EA6EA;IAvFM,YAAA;IACA,aAAA;IACA,YAAA;IACA,kBAAA;IGtNJ,iBAAA;IACA,wBAAA;IACA,oBAAA;GXq6CC;EQ7nCH;IAhFM,mBAAA;GRgtCH;CACF;AQvsCD;;EAGE,aAAA;EACA,kCAAA;CRwsCD;AQtsCD;EACE,eAAA;EA9IqB,0BAAA;CRu1CtB;AQpsCD;EACE,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,+BAAA;CRssCD;AQjsCG;;;EACE,iBAAA;CRqsCL;AQ/sCD;;;EAmBI,eAAA;EACA,eAAA;EACA,wBAAA;EACA,eAAA;CRisCH;AQ/rCG;;;EACE,uBAAA;CRmsCL;AQ3rCD;;EAEE,oBAAA;EACA,gBAAA;EACA,gCAAA;EACA,eAAA;EACA,kBAAA;CR6rCD;AQvrCG;;;;;;EAAW,YAAA;CR+rCd;AQ9rCG;;;;;;EACE,uBAAA;CRqsCL;AQ/rCD;EACE,oBAAA;EACA,mBAAA;EACA,wBAAA;CRisCD;AYv+CD;;;;EAIE,+DAAA;CZy+CD;AYr+CD;EACE,iBAAA;EACA,eAAA;EACA,eAAA;EACA,0BAAA;EACA,mBAAA;CZu+CD;AYn+CD;EACE,iBAAA;EACA,eAAA;EACA,YAAA;EACA,uBAAA;EACA,mBAAA;EACA,uDAAA;UAAA,+CAAA;CZq+CD;AY3+CD;EASI,WAAA;EACA,gBAAA;EACA,kBAAA;EACA,yBAAA;UAAA,iBAAA;CZq+CH;AYh+CD;EACE,eAAA;EACA,eAAA;EACA,iBAAA;EACA,gBAAA;EACA,wBAAA;EACA,sBAAA;EACA,sBAAA;EACA,eAAA;EACA,0BAAA;EACA,uBAAA;EACA,mBAAA;CZk+CD;AY7+CD;EAeI,WAAA;EACA,mBAAA;EACA,eAAA;EACA,sBAAA;EACA,8BAAA;EACA,iBAAA;CZi+CH;AY59CD;EACE,kBAAA;EACA,mBAAA;CZ89CD;AaxhDD;ECHE,mBAAA;EACA,kBAAA;EACA,mBAAA;EACA,oBAAA;Cd8hDD;AaxhDC;EAqEF;IAvEI,aAAA;Gb8hDD;CACF;Aa1hDC;EAkEF;IApEI,aAAA;GbgiDD;CACF;Aa5hDD;EA+DA;IAjEI,cAAA;GbkiDD;CACF;AazhDD;ECvBE,mBAAA;EACA,kBAAA;EACA,mBAAA;EACA,oBAAA;CdmjDD;AathDD;ECvBE,mBAAA;EACA,oBAAA;CdgjDD;AehjDG;EACE,mBAAA;EAEA,gBAAA;EAEA,mBAAA;EACA,oBAAA;CfgjDL;AehiDG;EACE,YAAA;CfkiDL;Ae3hDC;EACE,YAAA;Cf6hDH;Ae9hDC;EACE,oBAAA;CfgiDH;AejiDC;EACE,oBAAA;CfmiDH;AepiDC;EACE,WAAA;CfsiDH;AeviDC;EACE,oBAAA;CfyiDH;Ae1iDC;EACE,oBAAA;Cf4iDH;Ae7iDC;EACE,WAAA;Cf+iDH;AehjDC;EACE,oBAAA;CfkjDH;AenjDC;EACE,oBAAA;CfqjDH;AetjDC;EACE,WAAA;CfwjDH;AezjDC;EACE,oBAAA;Cf2jDH;Ae5jDC;EACE,mBAAA;Cf8jDH;AehjDC;EACE,YAAA;CfkjDH;AenjDC;EACE,oBAAA;CfqjDH;AetjDC;EACE,oBAAA;CfwjDH;AezjDC;EACE,WAAA;Cf2jDH;Ae5jDC;EACE,oBAAA;Cf8jDH;Ae/jDC;EACE,oBAAA;CfikDH;AelkDC;EACE,WAAA;CfokDH;AerkDC;EACE,oBAAA;CfukDH;AexkDC;EACE,oBAAA;Cf0kDH;Ae3kDC;EACE,WAAA;Cf6kDH;Ae9kDC;EACE,oBAAA;CfglDH;AejlDC;EACE,mBAAA;CfmlDH;Ae/kDC;EACE,YAAA;CfilDH;AejmDC;EACE,WAAA;CfmmDH;AepmDC;EACE,mBAAA;CfsmDH;AevmDC;EACE,mBAAA;CfymDH;Ae1mDC;EACE,UAAA;Cf4mDH;Ae7mDC;EACE,mBAAA;Cf+mDH;AehnDC;EACE,mBAAA;CfknDH;AennDC;EACE,UAAA;CfqnDH;AetnDC;EACE,mBAAA;CfwnDH;AeznDC;EACE,mBAAA;Cf2nDH;Ae5nDC;EACE,UAAA;Cf8nDH;Ae/nDC;EACE,mBAAA;CfioDH;AeloDC;EACE,kBAAA;CfooDH;AehoDC;EACE,WAAA;CfkoDH;AepnDC;EACE,kBAAA;CfsnDH;AevnDC;EACE,0BAAA;CfynDH;Ae1nDC;EACE,0BAAA;Cf4nDH;Ae7nDC;EACE,iBAAA;Cf+nDH;AehoDC;EACE,0BAAA;CfkoDH;AenoDC;EACE,0BAAA;CfqoDH;AetoDC;EACE,iBAAA;CfwoDH;AezoDC;EACE,0BAAA;Cf2oDH;Ae5oDC;EACE,0BAAA;Cf8oDH;Ae/oDC;EACE,iBAAA;CfipDH;AelpDC;EACE,0BAAA;CfopDH;AerpDC;EACE,yBAAA;CfupDH;AexpDC;EACE,gBAAA;Cf0pDH;Aa1pDD;EElCI;IACE,YAAA;Gf+rDH;EexrDD;IACE,YAAA;Gf0rDD;Ee3rDD;IACE,oBAAA;Gf6rDD;Ee9rDD;IACE,oBAAA;GfgsDD;EejsDD;IACE,WAAA;GfmsDD;EepsDD;IACE,oBAAA;GfssDD;EevsDD;IACE,oBAAA;GfysDD;Ee1sDD;IACE,WAAA;Gf4sDD;Ee7sDD;IACE,oBAAA;Gf+sDD;EehtDD;IACE,oBAAA;GfktDD;EentDD;IACE,WAAA;GfqtDD;EettDD;IACE,oBAAA;GfwtDD;EeztDD;IACE,mBAAA;Gf2tDD;Ee7sDD;IACE,YAAA;Gf+sDD;EehtDD;IACE,oBAAA;GfktDD;EentDD;IACE,oBAAA;GfqtDD;EettDD;IACE,WAAA;GfwtDD;EeztDD;IACE,oBAAA;Gf2tDD;Ee5tDD;IACE,oBAAA;Gf8tDD;Ee/tDD;IACE,WAAA;GfiuDD;EeluDD;IACE,oBAAA;GfouDD;EeruDD;IACE,oBAAA;GfuuDD;EexuDD;IACE,WAAA;Gf0uDD;Ee3uDD;IACE,oBAAA;Gf6uDD;Ee9uDD;IACE,mBAAA;GfgvDD;Ee5uDD;IACE,YAAA;Gf8uDD;Ee9vDD;IACE,WAAA;GfgwDD;EejwDD;IACE,mBAAA;GfmwDD;EepwDD;IACE,mBAAA;GfswDD;EevwDD;IACE,UAAA;GfywDD;Ee1wDD;IACE,mBAAA;Gf4wDD;Ee7wDD;IACE,mBAAA;Gf+wDD;EehxDD;IACE,UAAA;GfkxDD;EenxDD;IACE,mBAAA;GfqxDD;EetxDD;IACE,mBAAA;GfwxDD;EezxDD;IACE,UAAA;Gf2xDD;Ee5xDD;IACE,mBAAA;Gf8xDD;Ee/xDD;IACE,kBAAA;GfiyDD;Ee7xDD;IACE,WAAA;Gf+xDD;EejxDD;IACE,kBAAA;GfmxDD;EepxDD;IACE,0BAAA;GfsxDD;EevxDD;IACE,0BAAA;GfyxDD;Ee1xDD;IACE,iBAAA;Gf4xDD;Ee7xDD;IACE,0BAAA;Gf+xDD;EehyDD;IACE,0BAAA;GfkyDD;EenyDD;IACE,iBAAA;GfqyDD;EetyDD;IACE,0BAAA;GfwyDD;EezyDD;IACE,0BAAA;Gf2yDD;Ee5yDD;IACE,iBAAA;Gf8yDD;Ee/yDD;IACE,0BAAA;GfizDD;EelzDD;IACE,yBAAA;GfozDD;EerzDD;IACE,gBAAA;GfuzDD;CACF;Aa/yDD;EE3CI;IACE,YAAA;Gf61DH;Eet1DD;IACE,YAAA;Gfw1DD;Eez1DD;IACE,oBAAA;Gf21DD;Ee51DD;IACE,oBAAA;Gf81DD;Ee/1DD;IACE,WAAA;Gfi2DD;Eel2DD;IACE,oBAAA;Gfo2DD;Eer2DD;IACE,oBAAA;Gfu2DD;Eex2DD;IACE,WAAA;Gf02DD;Ee32DD;IACE,oBAAA;Gf62DD;Ee92DD;IACE,oBAAA;Gfg3DD;Eej3DD;IACE,WAAA;Gfm3DD;Eep3DD;IACE,oBAAA;Gfs3DD;Eev3DD;IACE,mBAAA;Gfy3DD;Ee32DD;IACE,YAAA;Gf62DD;Ee92DD;IACE,oBAAA;Gfg3DD;Eej3DD;IACE,oBAAA;Gfm3DD;Eep3DD;IACE,WAAA;Gfs3DD;Eev3DD;IACE,oBAAA;Gfy3DD;Ee13DD;IACE,oBAAA;Gf43DD;Ee73DD;IACE,WAAA;Gf+3DD;Eeh4DD;IACE,oBAAA;Gfk4DD;Een4DD;IACE,oBAAA;Gfq4DD;Eet4DD;IACE,WAAA;Gfw4DD;Eez4DD;IACE,oBAAA;Gf24DD;Ee54DD;IACE,mBAAA;Gf84DD;Ee14DD;IACE,YAAA;Gf44DD;Ee55DD;IACE,WAAA;Gf85DD;Ee/5DD;IACE,mBAAA;Gfi6DD;Eel6DD;IACE,mBAAA;Gfo6DD;Eer6DD;IACE,UAAA;Gfu6DD;Eex6DD;IACE,mBAAA;Gf06DD;Ee36DD;IACE,mBAAA;Gf66DD;Ee96DD;IACE,UAAA;Gfg7DD;Eej7DD;IACE,mBAAA;Gfm7DD;Eep7DD;IACE,mBAAA;Gfs7DD;Eev7DD;IACE,UAAA;Gfy7DD;Ee17DD;IACE,mBAAA;Gf47DD;Ee77DD;IACE,kBAAA;Gf+7DD;Ee37DD;IACE,WAAA;Gf67DD;Ee/6DD;IACE,kBAAA;Gfi7DD;Eel7DD;IACE,0BAAA;Gfo7DD;Eer7DD;IACE,0BAAA;Gfu7DD;Eex7DD;IACE,iBAAA;Gf07DD;Ee37DD;IACE,0BAAA;Gf67DD;Ee97DD;IACE,0BAAA;Gfg8DD;Eej8DD;IACE,iBAAA;Gfm8DD;Eep8DD;IACE,0BAAA;Gfs8DD;Eev8DD;IACE,0BAAA;Gfy8DD;Ee18DD;IACE,iBAAA;Gf48DD;Ee78DD;IACE,0BAAA;Gf+8DD;Eeh9DD;IACE,yBAAA;Gfk9DD;Een9DD;IACE,gBAAA;Gfq9DD;CACF;Aa18DD;EE9CI;IACE,YAAA;Gf2/DH;Eep/DD;IACE,YAAA;Gfs/DD;Eev/DD;IACE,oBAAA;Gfy/DD;Ee1/DD;IACE,oBAAA;Gf4/DD;Ee7/DD;IACE,WAAA;Gf+/DD;EehgED;IACE,oBAAA;GfkgED;EengED;IACE,oBAAA;GfqgED;EetgED;IACE,WAAA;GfwgED;EezgED;IACE,oBAAA;Gf2gED;Ee5gED;IACE,oBAAA;Gf8gED;Ee/gED;IACE,WAAA;GfihED;EelhED;IACE,oBAAA;GfohED;EerhED;IACE,mBAAA;GfuhED;EezgED;IACE,YAAA;Gf2gED;Ee5gED;IACE,oBAAA;Gf8gED;Ee/gED;IACE,oBAAA;GfihED;EelhED;IACE,WAAA;GfohED;EerhED;IACE,oBAAA;GfuhED;EexhED;IACE,oBAAA;Gf0hED;Ee3hED;IACE,WAAA;Gf6hED;Ee9hED;IACE,oBAAA;GfgiED;EejiED;IACE,oBAAA;GfmiED;EepiED;IACE,WAAA;GfsiED;EeviED;IACE,oBAAA;GfyiED;Ee1iED;IACE,mBAAA;Gf4iED;EexiED;IACE,YAAA;Gf0iED;Ee1jED;IACE,WAAA;Gf4jED;Ee7jED;IACE,mBAAA;Gf+jED;EehkED;IACE,mBAAA;GfkkED;EenkED;IACE,UAAA;GfqkED;EetkED;IACE,mBAAA;GfwkED;EezkED;IACE,mBAAA;Gf2kED;Ee5kED;IACE,UAAA;Gf8kED;Ee/kED;IACE,mBAAA;GfilED;EellED;IACE,mBAAA;GfolED;EerlED;IACE,UAAA;GfulED;EexlED;IACE,mBAAA;Gf0lED;Ee3lED;IACE,kBAAA;Gf6lED;EezlED;IACE,WAAA;Gf2lED;Ee7kED;IACE,kBAAA;Gf+kED;EehlED;IACE,0BAAA;GfklED;EenlED;IACE,0BAAA;GfqlED;EetlED;IACE,iBAAA;GfwlED;EezlED;IACE,0BAAA;Gf2lED;Ee5lED;IACE,0BAAA;Gf8lED;Ee/lED;IACE,iBAAA;GfimED;EelmED;IACE,0BAAA;GfomED;EermED;IACE,0BAAA;GfumED;EexmED;IACE,iBAAA;Gf0mED;Ee3mED;IACE,0BAAA;Gf6mED;Ee9mED;IACE,yBAAA;GfgnED;EejnED;IACE,gBAAA;GfmnED;CACF;AgBvrED;EACE,8BAAA;ChByrED;AgBvrED;EACE,iBAAA;EACA,oBAAA;EACA,eAAA;EACA,iBAAA;ChByrED;AgBvrED;EACE,iBAAA;ChByrED;AgBnrED;EACE,YAAA;EACA,gBAAA;EACA,oBAAA;ChBqrED;AgBxrED;;;;;;EAWQ,aAAA;EACA,wBAAA;EACA,oBAAA;EACA,2BAAA;ChBqrEP;AgBnsED;EAoBI,uBAAA;EACA,8BAAA;ChBkrEH;AgBvsED;;;;;;EA8BQ,cAAA;ChBirEP;AgB/sED;EAoCI,2BAAA;ChB8qEH;AgBltED;EAyCI,uBAAA;ChB4qEH;AgBrqED;;;;;;EAOQ,aAAA;ChBsqEP;AgB3pED;EACE,uBAAA;ChB6pED;AgB9pED;;;;;;EAQQ,uBAAA;ChB8pEP;AgBtqED;;EAeM,yBAAA;ChB2pEL;AgBjpED;EAEI,0BAAA;ChBkpEH;AgBzoED;EAEI,0BAAA;ChB0oEH;AgBjoED;EACE,iBAAA;EACA,YAAA;EACA,sBAAA;ChBmoED;AgB9nEG;;EACE,iBAAA;EACA,YAAA;EACA,oBAAA;ChBioEL;AiB7wEC;;;;;;;;;;;;EAOI,0BAAA;CjBoxEL;AiB9wEC;;;;;EAMI,0BAAA;CjB+wEL;AiBlyEC;;;;;;;;;;;;EAOI,0BAAA;CjByyEL;AiBnyEC;;;;;EAMI,0BAAA;CjBoyEL;AiBvzEC;;;;;;;;;;;;EAOI,0BAAA;CjB8zEL;AiBxzEC;;;;;EAMI,0BAAA;CjByzEL;AiB50EC;;;;;;;;;;;;EAOI,0BAAA;CjBm1EL;AiB70EC;;;;;EAMI,0BAAA;CjB80EL;AiBj2EC;;;;;;;;;;;;EAOI,0BAAA;CjBw2EL;AiBl2EC;;;;;EAMI,0BAAA;CjBm2EL;AgBjtED;EACE,iBAAA;EACA,kBAAA;ChBmtED;AgBtpED;EACA;IA3DI,YAAA;IACA,oBAAA;IACA,mBAAA;IACA,6CAAA;IACA,uBAAA;GhBotED;EgB7pEH;IAnDM,iBAAA;GhBmtEH;EgBhqEH;;;;;;IA1CY,oBAAA;GhBktET;EgBxqEH;IAlCM,UAAA;GhB6sEH;EgB3qEH;;;;;;IAzBY,eAAA;GhB4sET;EgBnrEH;;;;;;IArBY,gBAAA;GhBgtET;EgB3rEH;;;;IARY,iBAAA;GhBysET;CACF;AkBn6ED;EACE,WAAA;EACA,UAAA;EACA,UAAA;EAIA,aAAA;ClBk6ED;AkB/5ED;EACE,eAAA;EACA,YAAA;EACA,WAAA;EACA,oBAAA;EACA,gBAAA;EACA,qBAAA;EACA,eAAA;EACA,UAAA;EACA,iCAAA;ClBi6ED;AkB95ED;EACE,sBAAA;EACA,gBAAA;EACA,mBAAA;EACA,kBAAA;ClBg6ED;AkBr5ED;Eb4BE,+BAAA;EACG,4BAAA;EACK,uBAAA;CL43ET;AkBr5ED;;EAEE,gBAAA;EACA,mBAAA;EACA,oBAAA;ClBu5ED;AkBp5ED;EACE,eAAA;ClBs5ED;AkBl5ED;EACE,eAAA;EACA,YAAA;ClBo5ED;AkBh5ED;;EAEE,aAAA;ClBk5ED;AkB94ED;;;EZrEE,2CAAA;EACA,qBAAA;CNw9ED;AkB74ED;EACE,eAAA;EACA,iBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;ClB+4ED;AkBr3ED;EACE,eAAA;EACA,YAAA;EACA,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,uBAAA;EACA,uBAAA;EACA,uBAAA;EACA,mBAAA;EbxDA,yDAAA;EACQ,iDAAA;EAyHR,uFAAA;EACK,0EAAA;EACG,uEAAA;CLwzET;AmBh8EC;EACE,sBAAA;EACA,WAAA;EdUF,uFAAA;EACQ,+EAAA;CLy7ET;AKx5EC;EACE,YAAA;EACA,WAAA;CL05EH;AKx5EC;EAA0B,YAAA;CL25E3B;AK15EC;EAAgC,YAAA;CL65EjC;AkBj4EC;EACE,UAAA;EACA,8BAAA;ClBm4EH;AkB33EC;;;EAGE,0BAAA;EACA,WAAA;ClB63EH;AkB13EC;;EAEE,oBAAA;ClB43EH;AkBx3EC;EACE,aAAA;ClB03EH;AkB92ED;EACE,yBAAA;ClBg3ED;AkBx0ED;EAtBI;;;;IACE,kBAAA;GlBo2EH;EkBj2EC;;;;;;;;IAEE,kBAAA;GlBy2EH;EkBt2EC;;;;;;;;IAEE,kBAAA;GlB82EH;CACF;AkBp2ED;EACE,oBAAA;ClBs2ED;AkB91ED;;EAEE,mBAAA;EACA,eAAA;EACA,iBAAA;EACA,oBAAA;ClBg2ED;AkBr2ED;;EAQI,iBAAA;EACA,mBAAA;EACA,iBAAA;EACA,oBAAA;EACA,gBAAA;ClBi2EH;AkB91ED;;;;EAIE,mBAAA;EACA,mBAAA;EACA,mBAAA;ClBg2ED;AkB71ED;;EAEE,iBAAA;ClB+1ED;AkB31ED;;EAEE,mBAAA;EACA,sBAAA;EACA,mBAAA;EACA,iBAAA;EACA,uBAAA;EACA,oBAAA;EACA,gBAAA;ClB61ED;AkB31ED;;EAEE,cAAA;EACA,kBAAA;ClB61ED;AkBp1EC;;;;;;EAGE,oBAAA;ClBy1EH;AkBn1EC;;;;EAEE,oBAAA;ClBu1EH;AkBj1EC;;;;EAGI,oBAAA;ClBo1EL;AkBz0ED;EAEE,iBAAA;EACA,oBAAA;EAEA,iBAAA;EACA,iBAAA;ClBy0ED;AkBv0EC;;EAEE,gBAAA;EACA,iBAAA;ClBy0EH;AkB5zED;ECnQE,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CnBkkFD;AmBhkFC;EACE,aAAA;EACA,kBAAA;CnBkkFH;AmB/jFC;;EAEE,aAAA;CnBikFH;AkBx0ED;EAEI,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;ClBy0EH;AkB/0ED;EASI,aAAA;EACA,kBAAA;ClBy0EH;AkBn1ED;;EAcI,aAAA;ClBy0EH;AkBv1ED;EAiBI,aAAA;EACA,iBAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;ClBy0EH;AkBr0ED;EC/RE,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;CnBumFD;AmBrmFC;EACE,aAAA;EACA,kBAAA;CnBumFH;AmBpmFC;;EAEE,aAAA;CnBsmFH;AkBj1ED;EAEI,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;ClBk1EH;AkBx1ED;EASI,aAAA;EACA,kBAAA;ClBk1EH;AkB51ED;;EAcI,aAAA;ClBk1EH;AkBh2ED;EAiBI,aAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;ClBk1EH;AkBz0ED;EAEE,mBAAA;ClB00ED;AkB50ED;EAMI,sBAAA;ClBy0EH;AkBr0ED;EACE,mBAAA;EACA,OAAA;EACA,SAAA;EACA,WAAA;EACA,eAAA;EACA,YAAA;EACA,aAAA;EACA,kBAAA;EACA,mBAAA;EACA,qBAAA;ClBu0ED;AkBr0ED;;;EAGE,YAAA;EACA,aAAA;EACA,kBAAA;ClBu0ED;AkBr0ED;;;EAGE,YAAA;EACA,aAAA;EACA,kBAAA;ClBu0ED;AkBn0ED;;;;;;;;;;EC1ZI,eAAA;CnByuFH;AkB/0ED;ECtZI,sBAAA;Ed+CF,yDAAA;EACQ,iDAAA;CL0rFT;AmBxuFG;EACE,sBAAA;Ed4CJ,0EAAA;EACQ,kEAAA;CL+rFT;AkBz1ED;EC5YI,eAAA;EACA,sBAAA;EACA,0BAAA;CnBwuFH;AkB91ED;ECtYI,eAAA;CnBuuFH;AkB91ED;;;;;;;;;;EC7ZI,eAAA;CnBuwFH;AkB12ED;ECzZI,sBAAA;Ed+CF,yDAAA;EACQ,iDAAA;CLwtFT;AmBtwFG;EACE,sBAAA;Ed4CJ,0EAAA;EACQ,kEAAA;CL6tFT;AkBp3ED;EC/YI,eAAA;EACA,sBAAA;EACA,0BAAA;CnBswFH;AkBz3ED;ECzYI,eAAA;CnBqwFH;AkBz3ED;;;;;;;;;;EChaI,eAAA;CnBqyFH;AkBr4ED;EC5ZI,sBAAA;Ed+CF,yDAAA;EACQ,iDAAA;CLsvFT;AmBpyFG;EACE,sBAAA;Ed4CJ,0EAAA;EACQ,kEAAA;CL2vFT;AkB/4ED;EClZI,eAAA;EACA,sBAAA;EACA,0BAAA;CnBoyFH;AkBp5ED;EC5YI,eAAA;CnBmyFH;AkBh5EC;EACE,UAAA;ClBk5EH;AkBh5EC;EACE,OAAA;ClBk5EH;AkBx4ED;EACE,eAAA;EACA,gBAAA;EACA,oBAAA;EACA,eAAA;ClB04ED;AkBvzED;EAwEA;IAtIM,sBAAA;IACA,iBAAA;IACA,uBAAA;GlBy3EH;EkBrvEH;IA/HM,sBAAA;IACA,YAAA;IACA,uBAAA;GlBu3EH;EkB1vEH;IAxHM,sBAAA;GlBq3EH;EkB7vEH;IApHM,sBAAA;IACA,uBAAA;GlBo3EH;EkBjwEH;;;IA9GQ,YAAA;GlBo3EL;EkBtwEH;IAxGM,YAAA;GlBi3EH;EkBzwEH;IApGM,iBAAA;IACA,uBAAA;GlBg3EH;EkB7wEH;;IA5FM,sBAAA;IACA,cAAA;IACA,iBAAA;IACA,uBAAA;GlB62EH;EkBpxEH;;IAtFQ,gBAAA;GlB82EL;EkBxxEH;;IAjFM,mBAAA;IACA,eAAA;GlB62EH;EkB7xEH;IA3EM,OAAA;GlB22EH;CACF;AkBj2ED;;;;EASI,cAAA;EACA,iBAAA;EACA,iBAAA;ClB81EH;AkBz2ED;;EAiBI,iBAAA;ClB41EH;AkB72ED;EJthBE,mBAAA;EACA,oBAAA;Cds4FD;AkB10EC;EAyBF;IAnCM,kBAAA;IACA,iBAAA;IACA,iBAAA;GlBw1EH;CACF;AkBx3ED;EAwCI,YAAA;ClBm1EH;AkBr0EC;EAUF;IAdQ,kBAAA;IACA,gBAAA;GlB60EL;CACF;AkBn0EC;EAEF;IANQ,iBAAA;IACA,gBAAA;GlB20EL;CACF;AoBp6FD;EACE,sBAAA;EACA,iBAAA;EACA,oBAAA;EACA,mBAAA;EACA,uBAAA;EACA,+BAAA;MAAA,2BAAA;EACA,gBAAA;EACA,uBAAA;EACA,8BAAA;EACA,oBAAA;EC0CA,kBAAA;EACA,gBAAA;EACA,wBAAA;EACA,mBAAA;EhB+JA,0BAAA;EACG,uBAAA;EACC,sBAAA;EACI,kBAAA;CL+tFT;AoBv6FG;;;;;;EdnBF,2CAAA;EACA,qBAAA;CNk8FD;AoB16FC;;;EAGE,YAAA;EACA,sBAAA;CpB46FH;AoBz6FC;;EAEE,WAAA;EACA,uBAAA;Ef2BF,yDAAA;EACQ,iDAAA;CLi5FT;AoBz6FC;;;EAGE,oBAAA;EE7CF,cAAA;EAGA,0BAAA;EjB8DA,yBAAA;EACQ,iBAAA;CL05FT;AoBz6FG;;EAEE,qBAAA;CpB26FL;AoBl6FD;EC3DE,YAAA;EACA,uBAAA;EACA,mBAAA;CrBg+FD;AqB99FC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBg+FP;AqB99FC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBg+FP;AqB99FC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBg+FP;AqB99FG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBs+FT;AqBn+FC;;;EAGE,uBAAA;CrBq+FH;AqBh+FG;;;;;;;;;EAGE,uBAAA;EACI,mBAAA;CrBw+FT;AoBv9FD;ECZI,YAAA;EACA,uBAAA;CrBs+FH;AoBx9FD;EC9DE,YAAA;EACA,0BAAA;EACA,sBAAA;CrByhGD;AqBvhGC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrByhGP;AqBvhGC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrByhGP;AqBvhGC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrByhGP;AqBvhGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB+hGT;AqB5hGC;;;EAGE,uBAAA;CrB8hGH;AqBzhGG;;;;;;;;;EAGE,0BAAA;EACI,sBAAA;CrBiiGT;AoB7gGD;ECfI,eAAA;EACA,uBAAA;CrB+hGH;AoB7gGD;EClEE,YAAA;EACA,0BAAA;EACA,sBAAA;CrBklGD;AqBhlGC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBklGP;AqBhlGC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBklGP;AqBhlGC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBklGP;AqBhlGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBwlGT;AqBrlGC;;;EAGE,uBAAA;CrBulGH;AqBllGG;;;;;;;;;EAGE,0BAAA;EACI,sBAAA;CrB0lGT;AoBlkGD;ECnBI,eAAA;EACA,uBAAA;CrBwlGH;AoBlkGD;ECtEE,YAAA;EACA,0BAAA;EACA,sBAAA;CrB2oGD;AqBzoGC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB2oGP;AqBzoGC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB2oGP;AqBzoGC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB2oGP;AqBzoGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBipGT;AqB9oGC;;;EAGE,uBAAA;CrBgpGH;AqB3oGG;;;;;;;;;EAGE,0BAAA;EACI,sBAAA;CrBmpGT;AoBvnGD;ECvBI,eAAA;EACA,uBAAA;CrBipGH;AoBvnGD;EC1EE,YAAA;EACA,0BAAA;EACA,sBAAA;CrBosGD;AqBlsGC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBosGP;AqBlsGC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBosGP;AqBlsGC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBosGP;AqBlsGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB0sGT;AqBvsGC;;;EAGE,uBAAA;CrBysGH;AqBpsGG;;;;;;;;;EAGE,0BAAA;EACI,sBAAA;CrB4sGT;AoB5qGD;EC3BI,eAAA;EACA,uBAAA;CrB0sGH;AoB5qGD;EC9EE,YAAA;EACA,0BAAA;EACA,sBAAA;CrB6vGD;AqB3vGC;;EAEE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB6vGP;AqB3vGC;EACE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB6vGP;AqB3vGC;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrB6vGP;AqB3vGG;;;;;;;;;EAGE,YAAA;EACA,0BAAA;EACI,sBAAA;CrBmwGT;AqBhwGC;;;EAGE,uBAAA;CrBkwGH;AqB7vGG;;;;;;;;;EAGE,0BAAA;EACI,sBAAA;CrBqwGT;AoBjuGD;EC/BI,eAAA;EACA,uBAAA;CrBmwGH;AoB5tGD;EACE,eAAA;EACA,oBAAA;EACA,iBAAA;CpB8tGD;AoB5tGC;;;;;EAKE,8BAAA;EfnCF,yBAAA;EACQ,iBAAA;CLkwGT;AoB7tGC;;;;EAIE,0BAAA;CpB+tGH;AoB7tGC;;EAEE,eAAA;EACA,2BAAA;EACA,8BAAA;CpB+tGH;AoB3tGG;;;;EAEE,eAAA;EACA,sBAAA;CpB+tGL;AoBttGD;;ECxEE,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;CrBkyGD;AoBztGD;;EC5EE,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CrByyGD;AoB5tGD;;EChFE,iBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CrBgzGD;AoB3tGD;EACE,eAAA;EACA,YAAA;CpB6tGD;AoBztGD;EACE,gBAAA;CpB2tGD;AoBptGC;;;EACE,YAAA;CpBwtGH;AuBl3GD;EACE,WAAA;ElBoLA,yCAAA;EACK,oCAAA;EACG,iCAAA;CLisGT;AuBr3GC;EACE,WAAA;CvBu3GH;AuBn3GD;EACE,cAAA;CvBq3GD;AuBn3GC;EAAY,eAAA;CvBs3Gb;AuBr3GC;EAAY,mBAAA;CvBw3Gb;AuBv3GC;EAAY,yBAAA;CvB03Gb;AuBv3GD;EACE,mBAAA;EACA,UAAA;EACA,iBAAA;ElBuKA,gDAAA;EACQ,2CAAA;KAAA,wCAAA;EAOR,mCAAA;EACQ,8BAAA;KAAA,2BAAA;EAGR,yCAAA;EACQ,oCAAA;KAAA,iCAAA;CL2sGT;AwBr5GD;EACE,sBAAA;EACA,SAAA;EACA,UAAA;EACA,iBAAA;EACA,uBAAA;EACA,uBAAA;EACA,yBAAA;EACA,oCAAA;EACA,mCAAA;CxBu5GD;AwBn5GD;;EAEE,mBAAA;CxBq5GD;AwBj5GD;EACE,WAAA;CxBm5GD;AwB/4GD;EACE,mBAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,cAAA;EACA,YAAA;EACA,iBAAA;EACA,eAAA;EACA,gBAAA;EACA,iBAAA;EACA,gBAAA;EACA,iBAAA;EACA,uBAAA;EACA,uBAAA;EACA,sCAAA;EACA,mBAAA;EnBsBA,oDAAA;EACQ,4CAAA;EmBrBR,qCAAA;UAAA,6BAAA;CxBk5GD;AwB74GC;EACE,SAAA;EACA,WAAA;CxB+4GH;AwBx6GD;ECzBE,YAAA;EACA,cAAA;EACA,iBAAA;EACA,0BAAA;CzBo8GD;AwB96GD;EAmCI,eAAA;EACA,kBAAA;EACA,YAAA;EACA,oBAAA;EACA,wBAAA;EACA,eAAA;EACA,oBAAA;CxB84GH;AwBx4GC;;EAEE,sBAAA;EACA,eAAA;EACA,0BAAA;CxB04GH;AwBp4GC;;;EAGE,YAAA;EACA,sBAAA;EACA,WAAA;EACA,0BAAA;CxBs4GH;AwB73GC;;;EAGE,eAAA;CxB+3GH;AwB33GC;;EAEE,sBAAA;EACA,8BAAA;EACA,uBAAA;EE3GF,oEAAA;EF6GE,oBAAA;CxB63GH;AwBx3GD;EAGI,eAAA;CxBw3GH;AwB33GD;EAQI,WAAA;CxBs3GH;AwB92GD;EACE,WAAA;EACA,SAAA;CxBg3GD;AwBx2GD;EACE,QAAA;EACA,YAAA;CxB02GD;AwBt2GD;EACE,eAAA;EACA,kBAAA;EACA,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,oBAAA;CxBw2GD;AwBp2GD;EACE,gBAAA;EACA,QAAA;EACA,SAAA;EACA,UAAA;EACA,OAAA;EACA,aAAA;CxBs2GD;AwBl2GD;EACE,SAAA;EACA,WAAA;CxBo2GD;AwB51GD;;EAII,cAAA;EACA,0BAAA;EACA,4BAAA;EACA,YAAA;CxB41GH;AwBn2GD;;EAWI,UAAA;EACA,aAAA;EACA,mBAAA;CxB41GH;AwBv0GD;EAXE;IApEA,WAAA;IACA,SAAA;GxB05GC;EwBv1GD;IA1DA,QAAA;IACA,YAAA;GxBo5GC;CACF;A2BpiHD;;EAEE,mBAAA;EACA,sBAAA;EACA,uBAAA;C3BsiHD;A2B1iHD;;EAMI,mBAAA;EACA,YAAA;C3BwiHH;A2BtiHG;;;;;;;;EAIE,WAAA;C3B4iHL;A2BtiHD;;;;EAKI,kBAAA;C3BuiHH;A2BliHD;EACE,kBAAA;C3BoiHD;A2BriHD;;;EAOI,YAAA;C3BmiHH;A2B1iHD;;;EAYI,iBAAA;C3BmiHH;A2B/hHD;EACE,iBAAA;C3BiiHD;A2B7hHD;EACE,eAAA;C3B+hHD;A2B9hHC;EClDA,8BAAA;EACG,2BAAA;C5BmlHJ;A2B7hHD;;EC/CE,6BAAA;EACG,0BAAA;C5BglHJ;A2B5hHD;EACE,YAAA;C3B8hHD;A2B5hHD;EACE,iBAAA;C3B8hHD;A2B5hHD;;ECnEE,8BAAA;EACG,2BAAA;C5BmmHJ;A2B3hHD;ECjEE,6BAAA;EACG,0BAAA;C5B+lHJ;A2B1hHD;;EAEE,WAAA;C3B4hHD;A2B3gHD;EACE,kBAAA;EACA,mBAAA;C3B6gHD;A2B3gHD;EACE,mBAAA;EACA,oBAAA;C3B6gHD;A2BxgHD;EtB/CE,yDAAA;EACQ,iDAAA;CL0jHT;A2BxgHC;EtBnDA,yBAAA;EACQ,iBAAA;CL8jHT;A2BrgHD;EACE,eAAA;C3BugHD;A2BpgHD;EACE,wBAAA;EACA,uBAAA;C3BsgHD;A2BngHD;EACE,wBAAA;C3BqgHD;A2B9/GD;;;EAII,eAAA;EACA,YAAA;EACA,YAAA;EACA,gBAAA;C3B+/GH;A2BtgHD;EAcM,YAAA;C3B2/GL;A2BzgHD;;;;EAsBI,iBAAA;EACA,eAAA;C3By/GH;A2Bp/GC;EACE,iBAAA;C3Bs/GH;A2Bp/GC;EC3KA,6BAAA;EACC,4BAAA;EAOD,8BAAA;EACC,6BAAA;C5B4pHF;A2Bt/GC;EC/KA,2BAAA;EACC,0BAAA;EAOD,gCAAA;EACC,+BAAA;C5BkqHF;A2Bv/GD;EACE,iBAAA;C3By/GD;A2Bv/GD;;EC/KE,8BAAA;EACC,6BAAA;C5B0qHF;A2Bt/GD;EC7LE,2BAAA;EACC,0BAAA;C5BsrHF;A2Bl/GD;EACE,eAAA;EACA,YAAA;EACA,oBAAA;EACA,0BAAA;C3Bo/GD;A2Bx/GD;;EAOI,YAAA;EACA,oBAAA;EACA,UAAA;C3Bq/GH;A2B9/GD;EAYI,YAAA;C3Bq/GH;A2BjgHD;EAgBI,WAAA;C3Bo/GH;A2Bn+GD;;;;EAKM,mBAAA;EACA,uBAAA;EACA,qBAAA;C3Bo+GL;A6B9sHD;EACE,mBAAA;EACA,eAAA;EACA,0BAAA;C7BgtHD;A6B7sHC;EACE,YAAA;EACA,gBAAA;EACA,iBAAA;C7B+sHH;A6BxtHD;EAeI,mBAAA;EACA,WAAA;EAKA,YAAA;EAEA,YAAA;EACA,iBAAA;C7BusHH;A6BrsHG;EACE,WAAA;C7BusHL;A6B7rHD;;;EV0BE,aAAA;EACA,mBAAA;EACA,gBAAA;EACA,uBAAA;EACA,mBAAA;CnBwqHD;AmBtqHC;;;EACE,aAAA;EACA,kBAAA;CnB0qHH;AmBvqHC;;;;;;EAEE,aAAA;CnB6qHH;A6B/sHD;;;EVqBE,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;CnB+rHD;AmB7rHC;;;EACE,aAAA;EACA,kBAAA;CnBisHH;AmB9rHC;;;;;;EAEE,aAAA;CnBosHH;A6B7tHD;;;EAGE,oBAAA;C7B+tHD;A6B7tHC;;;EACE,iBAAA;C7BiuHH;A6B7tHD;;EAEE,UAAA;EACA,oBAAA;EACA,uBAAA;C7B+tHD;A6B1tHD;EACE,kBAAA;EACA,gBAAA;EACA,oBAAA;EACA,eAAA;EACA,eAAA;EACA,mBAAA;EACA,0BAAA;EACA,uBAAA;EACA,mBAAA;C7B4tHD;A6BztHC;EACE,kBAAA;EACA,gBAAA;EACA,mBAAA;C7B2tHH;A6BztHC;EACE,mBAAA;EACA,gBAAA;EACA,mBAAA;C7B2tHH;A6B/uHD;;EA0BI,cAAA;C7BytHH;A6BptHD;;;;;;;EDpGE,8BAAA;EACG,2BAAA;C5Bi0HJ;A6BrtHD;EACE,gBAAA;C7ButHD;A6BrtHD;;;;;;;EDxGE,6BAAA;EACG,0BAAA;C5Bs0HJ;A6BttHD;EACE,eAAA;C7BwtHD;A6BntHD;EACE,mBAAA;EAGA,aAAA;EACA,oBAAA;C7BmtHD;A6BxtHD;EAUI,mBAAA;C7BitHH;A6B3tHD;EAYM,kBAAA;C7BktHL;A6B/sHG;;;EAGE,WAAA;C7BitHL;A6B5sHC;;EAGI,mBAAA;C7B6sHL;A6B1sHC;;EAGI,WAAA;EACA,kBAAA;C7B2sHL;A8B12HD;EACE,iBAAA;EACA,gBAAA;EACA,iBAAA;C9B42HD;A8B/2HD;EAOI,mBAAA;EACA,eAAA;C9B22HH;A8Bn3HD;EAWM,mBAAA;EACA,eAAA;EACA,mBAAA;C9B22HL;A8B12HK;;EAEE,sBAAA;EACA,0BAAA;C9B42HP;A8Bv2HG;EACE,eAAA;C9By2HL;A8Bv2HK;;EAEE,eAAA;EACA,sBAAA;EACA,8BAAA;EACA,oBAAA;C9By2HP;A8Bl2HG;;;EAGE,0BAAA;EACA,sBAAA;C9Bo2HL;A8B74HD;ELHE,YAAA;EACA,cAAA;EACA,iBAAA;EACA,0BAAA;CzBm5HD;A8Bn5HD;EA0DI,gBAAA;C9B41HH;A8Bn1HD;EACE,8BAAA;C9Bq1HD;A8Bt1HD;EAGI,YAAA;EAEA,oBAAA;C9Bq1HH;A8B11HD;EASM,kBAAA;EACA,wBAAA;EACA,8BAAA;EACA,2BAAA;C9Bo1HL;A8Bn1HK;EACE,mCAAA;C9Bq1HP;A8B/0HK;;;EAGE,eAAA;EACA,uBAAA;EACA,uBAAA;EACA,iCAAA;EACA,gBAAA;C9Bi1HP;A8B50HC;EAqDA,YAAA;EA8BA,iBAAA;C9B6vHD;A8Bh1HC;EAwDE,YAAA;C9B2xHH;A8Bn1HC;EA0DI,mBAAA;EACA,mBAAA;C9B4xHL;A8Bv1HC;EAgEE,UAAA;EACA,WAAA;C9B0xHH;A8B9wHD;EA0DA;IAjEM,oBAAA;IACA,UAAA;G9ByxHH;E8BztHH;IA9DQ,iBAAA;G9B0xHL;CACF;A8Bp2HC;EAuFE,gBAAA;EACA,mBAAA;C9BgxHH;A8Bx2HC;;;EA8FE,uBAAA;C9B+wHH;A8BjwHD;EA2BA;IApCM,8BAAA;IACA,2BAAA;G9B8wHH;E8B3uHH;;;IA9BM,0BAAA;G9B8wHH;CACF;A8B/2HD;EAEI,YAAA;C9Bg3HH;A8Bl3HD;EAMM,mBAAA;C9B+2HL;A8Br3HD;EASM,iBAAA;C9B+2HL;A8B12HK;;;EAGE,YAAA;EACA,0BAAA;C9B42HP;A8Bp2HD;EAEI,YAAA;C9Bq2HH;A8Bv2HD;EAIM,gBAAA;EACA,eAAA;C9Bs2HL;A8B11HD;EACE,YAAA;C9B41HD;A8B71HD;EAII,YAAA;C9B41HH;A8Bh2HD;EAMM,mBAAA;EACA,mBAAA;C9B61HL;A8Bp2HD;EAYI,UAAA;EACA,WAAA;C9B21HH;A8B/0HD;EA0DA;IAjEM,oBAAA;IACA,UAAA;G9B01HH;E8B1xHH;IA9DQ,iBAAA;G9B21HL;CACF;A8Bn1HD;EACE,iBAAA;C9Bq1HD;A8Bt1HD;EAKI,gBAAA;EACA,mBAAA;C9Bo1HH;A8B11HD;;;EAYI,uBAAA;C9Bm1HH;A8Br0HD;EA2BA;IApCM,8BAAA;IACA,2BAAA;G9Bk1HH;E8B/yHH;;;IA9BM,0BAAA;G9Bk1HH;CACF;A8Bz0HD;EAEI,cAAA;C9B00HH;A8B50HD;EAKI,eAAA;C9B00HH;A8Bj0HD;EAEE,iBAAA;EF3OA,2BAAA;EACC,0BAAA;C5B8iIF;A+BxiID;EACE,mBAAA;EACA,iBAAA;EACA,oBAAA;EACA,8BAAA;C/B0iID;A+BliID;EA8nBA;IAhoBI,mBAAA;G/BwiID;CACF;A+BzhID;EAgnBA;IAlnBI,YAAA;G/B+hID;CACF;A+BjhID;EACE,oBAAA;EACA,oBAAA;EACA,mBAAA;EACA,kCAAA;EACA,2DAAA;UAAA,mDAAA;EAEA,kCAAA;C/BkhID;A+BhhIC;EACE,iBAAA;C/BkhIH;A+Bt/HD;EA6jBA;IArlBI,YAAA;IACA,cAAA;IACA,yBAAA;YAAA,iBAAA;G/BkhID;E+BhhIC;IACE,0BAAA;IACA,wBAAA;IACA,kBAAA;IACA,6BAAA;G/BkhIH;E+B/gIC;IACE,oBAAA;G/BihIH;E+B5gIC;;;IAGE,gBAAA;IACA,iBAAA;G/B8gIH;CACF;A+B1gID;;EAGI,kBAAA;C/B2gIH;A+BtgIC;EAmjBF;;IArjBM,kBAAA;G/B6gIH;CACF;A+BpgID;;;;EAII,oBAAA;EACA,mBAAA;C/BsgIH;A+BhgIC;EAgiBF;;;;IAniBM,gBAAA;IACA,eAAA;G/B0gIH;CACF;A+B9/HD;EACE,cAAA;EACA,sBAAA;C/BggID;A+B3/HD;EA8gBA;IAhhBI,iBAAA;G/BigID;CACF;A+B7/HD;;EAEE,gBAAA;EACA,SAAA;EACA,QAAA;EACA,cAAA;C/B+/HD;A+Bz/HD;EAggBA;;IAlgBI,iBAAA;G/BggID;CACF;A+B9/HD;EACE,OAAA;EACA,sBAAA;C/BggID;A+B9/HD;EACE,UAAA;EACA,iBAAA;EACA,sBAAA;C/BggID;A+B1/HD;EACE,YAAA;EACA,mBAAA;EACA,gBAAA;EACA,kBAAA;EACA,aAAA;C/B4/HD;A+B1/HC;;EAEE,sBAAA;C/B4/HH;A+BrgID;EAaI,eAAA;C/B2/HH;A+Bl/HD;EALI;;IAEE,mBAAA;G/B0/HH;CACF;A+Bh/HD;EACE,mBAAA;EACA,aAAA;EACA,mBAAA;EACA,kBAAA;EC9LA,gBAAA;EACA,mBAAA;ED+LA,8BAAA;EACA,uBAAA;EACA,8BAAA;EACA,mBAAA;C/Bm/HD;A+B/+HC;EACE,WAAA;C/Bi/HH;A+B//HD;EAmBI,eAAA;EACA,YAAA;EACA,YAAA;EACA,mBAAA;C/B++HH;A+BrgID;EAyBI,gBAAA;C/B++HH;A+Bz+HD;EAqbA;IAvbI,cAAA;G/B++HD;CACF;A+Bt+HD;EACE,oBAAA;C/Bw+HD;A+Bz+HD;EAII,kBAAA;EACA,qBAAA;EACA,kBAAA;C/Bw+HH;A+B58HC;EA2YF;IAjaM,iBAAA;IACA,YAAA;IACA,YAAA;IACA,cAAA;IACA,8BAAA;IACA,UAAA;IACA,yBAAA;YAAA,iBAAA;G/Bs+HH;E+B3kHH;;IAxZQ,2BAAA;G/Bu+HL;E+B/kHH;IArZQ,kBAAA;G/Bu+HL;E+Bt+HK;;IAEE,uBAAA;G/Bw+HP;CACF;A+Bt9HD;EA+XA;IA1YI,YAAA;IACA,UAAA;G/Bq+HD;E+B5lHH;IAtYM,YAAA;G/Bq+HH;E+B/lHH;IApYQ,kBAAA;IACA,qBAAA;G/Bs+HL;CACF;A+B39HD;EACE,mBAAA;EACA,oBAAA;EACA,mBAAA;EACA,kCAAA;EACA,qCAAA;E1B9NA,6FAAA;EACQ,qFAAA;E2B/DR,gBAAA;EACA,mBAAA;ChC4vID;AkBtuHD;EAwEA;IAtIM,sBAAA;IACA,iBAAA;IACA,uBAAA;GlBwyHH;EkBpqHH;IA/HM,sBAAA;IACA,YAAA;IACA,uBAAA;GlBsyHH;EkBzqHH;IAxHM,sBAAA;GlBoyHH;EkB5qHH;IApHM,sBAAA;IACA,uBAAA;GlBmyHH;EkBhrHH;;;IA9GQ,YAAA;GlBmyHL;EkBrrHH;IAxGM,YAAA;GlBgyHH;EkBxrHH;IApGM,iBAAA;IACA,uBAAA;GlB+xHH;EkB5rHH;;IA5FM,sBAAA;IACA,cAAA;IACA,iBAAA;IACA,uBAAA;GlB4xHH;EkBnsHH;;IAtFQ,gBAAA;GlB6xHL;EkBvsHH;;IAjFM,mBAAA;IACA,eAAA;GlB4xHH;EkB5sHH;IA3EM,OAAA;GlB0xHH;CACF;A+BpgIC;EAmWF;IAzWM,mBAAA;G/B8gIH;E+B5gIG;IACE,iBAAA;G/B8gIL;CACF;A+B7/HD;EAoVA;IA5VI,YAAA;IACA,UAAA;IACA,eAAA;IACA,gBAAA;IACA,eAAA;IACA,kBAAA;I1BzPF,yBAAA;IACQ,iBAAA;GLmwIP;CACF;A+BngID;EACE,cAAA;EHpUA,2BAAA;EACC,0BAAA;C5B00IF;A+BngID;EACE,iBAAA;EHzUA,6BAAA;EACC,4BAAA;EAOD,8BAAA;EACC,6BAAA;C5By0IF;A+B//HD;EChVE,gBAAA;EACA,mBAAA;ChCk1ID;A+BhgIC;ECnVA,iBAAA;EACA,oBAAA;ChCs1ID;A+BjgIC;ECtVA,iBAAA;EACA,oBAAA;ChC01ID;A+B3/HD;EChWE,iBAAA;EACA,oBAAA;ChC81ID;A+Bv/HD;EAsSA;IA1SI,YAAA;IACA,kBAAA;IACA,mBAAA;G/B+/HD;CACF;A+Bl+HD;EAhBE;IExWA,uBAAA;GjC81IC;E+Br/HD;IE5WA,wBAAA;IF8WE,oBAAA;G/Bu/HD;E+Bz/HD;IAKI,gBAAA;G/Bu/HH;CACF;A+B9+HD;EACE,0BAAA;EACA,sBAAA;C/Bg/HD;A+Bl/HD;EAKI,YAAA;C/Bg/HH;A+B/+HG;;EAEE,eAAA;EACA,8BAAA;C/Bi/HL;A+B1/HD;EAcI,YAAA;C/B++HH;A+B7/HD;EAmBM,YAAA;C/B6+HL;A+B3+HK;;EAEE,YAAA;EACA,8BAAA;C/B6+HP;A+Bz+HK;;;EAGE,YAAA;EACA,0BAAA;C/B2+HP;A+Bv+HK;;;EAGE,YAAA;EACA,8BAAA;C/By+HP;A+BjhID;EA8CI,mBAAA;C/Bs+HH;A+Br+HG;;EAEE,uBAAA;C/Bu+HL;A+BxhID;EAoDM,uBAAA;C/Bu+HL;A+B3hID;;EA0DI,sBAAA;C/Bq+HH;A+B99HK;;;EAGE,0BAAA;EACA,YAAA;C/Bg+HP;A+B/7HC;EAoKF;IA7LU,YAAA;G/B49HP;E+B39HO;;IAEE,YAAA;IACA,8BAAA;G/B69HT;E+Bz9HO;;;IAGE,YAAA;IACA,0BAAA;G/B29HT;E+Bv9HO;;;IAGE,YAAA;IACA,8BAAA;G/By9HT;CACF;A+B3jID;EA8GI,YAAA;C/Bg9HH;A+B/8HG;EACE,YAAA;C/Bi9HL;A+BjkID;EAqHI,YAAA;C/B+8HH;A+B98HG;;EAEE,YAAA;C/Bg9HL;A+B58HK;;;;EAEE,YAAA;C/Bg9HP;A+Bx8HD;EACE,uBAAA;EACA,sBAAA;C/B08HD;A+B58HD;EAKI,eAAA;C/B08HH;A+Bz8HG;;EAEE,YAAA;EACA,8BAAA;C/B28HL;A+Bp9HD;EAcI,eAAA;C/By8HH;A+Bv9HD;EAmBM,eAAA;C/Bu8HL;A+Br8HK;;EAEE,YAAA;EACA,8BAAA;C/Bu8HP;A+Bn8HK;;;EAGE,YAAA;EACA,0BAAA;C/Bq8HP;A+Bj8HK;;;EAGE,YAAA;EACA,8BAAA;C/Bm8HP;A+B3+HD;EA+CI,mBAAA;C/B+7HH;A+B97HG;;EAEE,uBAAA;C/Bg8HL;A+Bl/HD;EAqDM,uBAAA;C/Bg8HL;A+Br/HD;;EA2DI,sBAAA;C/B87HH;A+Bx7HK;;;EAGE,0BAAA;EACA,YAAA;C/B07HP;A+Bn5HC;EAwBF;IAvDU,sBAAA;G/Bs7HP;E+B/3HH;IApDU,0BAAA;G/Bs7HP;E+Bl4HH;IAjDU,eAAA;G/Bs7HP;E+Br7HO;;IAEE,YAAA;IACA,8BAAA;G/Bu7HT;E+Bn7HO;;;IAGE,YAAA;IACA,0BAAA;G/Bq7HT;E+Bj7HO;;;IAGE,YAAA;IACA,8BAAA;G/Bm7HT;CACF;A+B3hID;EA+GI,eAAA;C/B+6HH;A+B96HG;EACE,YAAA;C/Bg7HL;A+BjiID;EAsHI,eAAA;C/B86HH;A+B76HG;;EAEE,YAAA;C/B+6HL;A+B36HK;;;;EAEE,YAAA;C/B+6HP;AkCzjJD;EACE,kBAAA;EACA,oBAAA;EACA,iBAAA;EACA,0BAAA;EACA,mBAAA;ClC2jJD;AkChkJD;EAQI,sBAAA;ClC2jJH;AkCnkJD;EAWM,kBAAA;EACA,eAAA;EACA,YAAA;ClC2jJL;AkCxkJD;EAkBI,eAAA;ClCyjJH;AmC7kJD;EACE,sBAAA;EACA,gBAAA;EACA,eAAA;EACA,mBAAA;CnC+kJD;AmCnlJD;EAOI,gBAAA;CnC+kJH;AmCtlJD;;EAUM,mBAAA;EACA,YAAA;EACA,kBAAA;EACA,wBAAA;EACA,sBAAA;EACA,eAAA;EACA,uBAAA;EACA,uBAAA;EACA,kBAAA;CnCglJL;AmC9kJG;;EAGI,eAAA;EPXN,+BAAA;EACG,4BAAA;C5B2lJJ;AmC7kJG;;EPvBF,gCAAA;EACG,6BAAA;C5BwmJJ;AmCxkJG;;;;EAEE,WAAA;EACA,eAAA;EACA,0BAAA;EACA,mBAAA;CnC4kJL;AmCtkJG;;;;;;EAGE,WAAA;EACA,YAAA;EACA,0BAAA;EACA,sBAAA;EACA,gBAAA;CnC2kJL;AmCloJD;;;;;;EAkEM,eAAA;EACA,uBAAA;EACA,mBAAA;EACA,oBAAA;CnCwkJL;AmC/jJD;;EC3EM,mBAAA;EACA,gBAAA;EACA,uBAAA;CpC8oJL;AoC5oJG;;ERKF,+BAAA;EACG,4BAAA;C5B2oJJ;AoC3oJG;;ERTF,gCAAA;EACG,6BAAA;C5BwpJJ;AmC1kJD;;EChFM,kBAAA;EACA,gBAAA;EACA,iBAAA;CpC8pJL;AoC5pJG;;ERKF,+BAAA;EACG,4BAAA;C5B2pJJ;AoC3pJG;;ERTF,gCAAA;EACG,6BAAA;C5BwqJJ;AqC3qJD;EACE,gBAAA;EACA,eAAA;EACA,iBAAA;EACA,mBAAA;CrC6qJD;AqCjrJD;EAOI,gBAAA;CrC6qJH;AqCprJD;;EAUM,sBAAA;EACA,kBAAA;EACA,uBAAA;EACA,uBAAA;EACA,oBAAA;CrC8qJL;AqC5rJD;;EAmBM,sBAAA;EACA,0BAAA;CrC6qJL;AqCjsJD;;EA2BM,aAAA;CrC0qJL;AqCrsJD;;EAkCM,YAAA;CrCuqJL;AqCzsJD;;;;EA2CM,eAAA;EACA,uBAAA;EACA,oBAAA;CrCoqJL;AsCltJD;EACE,gBAAA;EACA,wBAAA;EACA,eAAA;EACA,kBAAA;EACA,eAAA;EACA,YAAA;EACA,mBAAA;EACA,oBAAA;EACA,yBAAA;EACA,qBAAA;CtCotJD;AsChtJG;;EAEE,YAAA;EACA,sBAAA;EACA,gBAAA;CtCktJL;AsC7sJC;EACE,cAAA;CtC+sJH;AsC3sJC;EACE,mBAAA;EACA,UAAA;CtC6sJH;AsCtsJD;ECtCE,0BAAA;CvC+uJD;AuC5uJG;;EAEE,0BAAA;CvC8uJL;AsCzsJD;EC1CE,0BAAA;CvCsvJD;AuCnvJG;;EAEE,0BAAA;CvCqvJL;AsC5sJD;EC9CE,0BAAA;CvC6vJD;AuC1vJG;;EAEE,0BAAA;CvC4vJL;AsC/sJD;EClDE,0BAAA;CvCowJD;AuCjwJG;;EAEE,0BAAA;CvCmwJL;AsCltJD;ECtDE,0BAAA;CvC2wJD;AuCxwJG;;EAEE,0BAAA;CvC0wJL;AsCrtJD;EC1DE,0BAAA;CvCkxJD;AuC/wJG;;EAEE,0BAAA;CvCixJL;AwCnxJD;EACE,sBAAA;EACA,gBAAA;EACA,iBAAA;EACA,gBAAA;EACA,kBAAA;EACA,YAAA;EACA,eAAA;EACA,uBAAA;EACA,oBAAA;EACA,mBAAA;EACA,0BAAA;EACA,oBAAA;CxCqxJD;AwClxJC;EACE,cAAA;CxCoxJH;AwChxJC;EACE,mBAAA;EACA,UAAA;CxCkxJH;AwC/wJC;;EAEE,OAAA;EACA,iBAAA;CxCixJH;AwC5wJG;;EAEE,YAAA;EACA,sBAAA;EACA,gBAAA;CxC8wJL;AwCzwJC;;EAEE,eAAA;EACA,uBAAA;CxC2wJH;AwCxwJC;EACE,aAAA;CxC0wJH;AwCvwJC;EACE,kBAAA;CxCywJH;AwCtwJC;EACE,iBAAA;CxCwwJH;AyCl0JD;EACE,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,eAAA;EACA,0BAAA;CzCo0JD;AyCz0JD;;EASI,eAAA;CzCo0JH;AyC70JD;EAaI,oBAAA;EACA,gBAAA;EACA,iBAAA;CzCm0JH;AyCl1JD;EAmBI,0BAAA;CzCk0JH;AyC/zJC;;EAEE,mBAAA;EACA,mBAAA;EACA,oBAAA;CzCi0JH;AyC31JD;EA8BI,gBAAA;CzCg0JH;AyC9yJD;EACA;IAfI,kBAAA;IACA,qBAAA;GzCg0JD;EyC9zJC;;IAEE,mBAAA;IACA,oBAAA;GzCg0JH;EyCvzJH;;IAJM,gBAAA;GzC+zJH;CACF;A0C52JD;EACE,eAAA;EACA,aAAA;EACA,oBAAA;EACA,wBAAA;EACA,uBAAA;EACA,uBAAA;EACA,mBAAA;ErCiLA,4CAAA;EACK,uCAAA;EACG,oCAAA;CL8rJT;A0Cx3JD;;EAaI,kBAAA;EACA,mBAAA;C1C+2JH;A0C32JC;;;EAGE,sBAAA;C1C62JH;A0Cl4JD;EA0BI,aAAA;EACA,eAAA;C1C22JH;A2Cp4JD;EACE,cAAA;EACA,oBAAA;EACA,8BAAA;EACA,mBAAA;C3Cs4JD;A2C14JD;EAQI,cAAA;EAEA,eAAA;C3Co4JH;A2C94JD;EAeI,kBAAA;C3Ck4JH;A2Cj5JD;;EAqBI,iBAAA;C3Cg4JH;A2Cr5JD;EAyBI,gBAAA;C3C+3JH;A2Cv3JD;;EAEE,oBAAA;C3Cy3JD;A2C33JD;;EAMI,mBAAA;EACA,UAAA;EACA,aAAA;EACA,eAAA;C3Cy3JH;A2Cj3JD;ECvDE,0BAAA;EACA,sBAAA;EACA,eAAA;C5C26JD;A2Ct3JD;EClDI,0BAAA;C5C26JH;A2Cz3JD;EC/CI,eAAA;C5C26JH;A2Cx3JD;EC3DE,0BAAA;EACA,sBAAA;EACA,eAAA;C5Cs7JD;A2C73JD;ECtDI,0BAAA;C5Cs7JH;A2Ch4JD;ECnDI,eAAA;C5Cs7JH;A2C/3JD;EC/DE,0BAAA;EACA,sBAAA;EACA,eAAA;C5Ci8JD;A2Cp4JD;EC1DI,0BAAA;C5Ci8JH;A2Cv4JD;ECvDI,eAAA;C5Ci8JH;A2Ct4JD;ECnEE,0BAAA;EACA,sBAAA;EACA,eAAA;C5C48JD;A2C34JD;EC9DI,0BAAA;C5C48JH;A2C94JD;EC3DI,eAAA;C5C48JH;A6C98JD;EACE;IAAQ,4BAAA;G7Ci9JP;E6Ch9JD;IAAQ,yBAAA;G7Cm9JP;CACF;A6Ch9JD;EACE;IAAQ,4BAAA;G7Cm9JP;E6Cl9JD;IAAQ,yBAAA;G7Cq9JP;CACF;A6Cx9JD;EACE;IAAQ,4BAAA;G7Cm9JP;E6Cl9JD;IAAQ,yBAAA;G7Cq9JP;CACF;A6C98JD;EACE,iBAAA;EACA,aAAA;EACA,oBAAA;EACA,0BAAA;EACA,mBAAA;ExCsCA,uDAAA;EACQ,+CAAA;CL26JT;A6C78JD;EACE,YAAA;EACA,UAAA;EACA,aAAA;EACA,gBAAA;EACA,kBAAA;EACA,YAAA;EACA,mBAAA;EACA,0BAAA;ExCyBA,uDAAA;EACQ,+CAAA;EAyHR,oCAAA;EACK,+BAAA;EACG,4BAAA;CL+zJT;A6C18JD;;ECCI,8MAAA;EACA,yMAAA;EACA,sMAAA;EDAF,mCAAA;UAAA,2BAAA;C7C88JD;A6Cv8JD;;ExC5CE,2DAAA;EACK,sDAAA;EACG,mDAAA;CLu/JT;A6Cp8JD;EErEE,0BAAA;C/C4gKD;A+CzgKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9C49JH;A6Cx8JD;EEzEE,0BAAA;C/CohKD;A+CjhKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9Co+JH;A6C58JD;EE7EE,0BAAA;C/C4hKD;A+CzhKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9C4+JH;A6Ch9JD;EEjFE,0BAAA;C/CoiKD;A+CjiKC;EDgDE,8MAAA;EACA,yMAAA;EACA,sMAAA;C9Co/JH;AgD5iKD;EAEE,iBAAA;ChD6iKD;AgD3iKC;EACE,cAAA;ChD6iKH;AgDziKD;;EAEE,QAAA;EACA,iBAAA;ChD2iKD;AgDxiKD;EACE,eAAA;ChD0iKD;AgDviKD;EACE,eAAA;ChDyiKD;AgDtiKC;EACE,gBAAA;ChDwiKH;AgDpiKD;;EAEE,mBAAA;ChDsiKD;AgDniKD;;EAEE,oBAAA;ChDqiKD;AgDliKD;;;EAGE,oBAAA;EACA,oBAAA;ChDoiKD;AgDjiKD;EACE,uBAAA;ChDmiKD;AgDhiKD;EACE,uBAAA;ChDkiKD;AgD9hKD;EACE,cAAA;EACA,mBAAA;ChDgiKD;AgD1hKD;EACE,gBAAA;EACA,iBAAA;ChD4hKD;AiDnlKD;EAEE,oBAAA;EACA,gBAAA;CjDolKD;AiD5kKD;EACE,mBAAA;EACA,eAAA;EACA,mBAAA;EAEA,oBAAA;EACA,uBAAA;EACA,uBAAA;CjD6kKD;AiD1kKC;ErB3BA,6BAAA;EACC,4BAAA;C5BwmKF;AiD3kKC;EACE,iBAAA;ErBvBF,gCAAA;EACC,+BAAA;C5BqmKF;AiDpkKD;;EAEE,YAAA;CjDskKD;AiDxkKD;;EAKI,YAAA;CjDukKH;AiDnkKC;;;;EAEE,sBAAA;EACA,YAAA;EACA,0BAAA;CjDukKH;AiDnkKD;EACE,YAAA;EACA,iBAAA;CjDqkKD;AiDhkKC;;;EAGE,0BAAA;EACA,eAAA;EACA,oBAAA;CjDkkKH;AiDvkKC;;;EASI,eAAA;CjDmkKL;AiD5kKC;;;EAYI,eAAA;CjDqkKL;AiDhkKC;;;EAGE,WAAA;EACA,YAAA;EACA,0BAAA;EACA,sBAAA;CjDkkKH;AiDxkKC;;;;;;;;;EAYI,eAAA;CjDukKL;AiDnlKC;;;EAeI,eAAA;CjDykKL;AkD3qKC;EACE,eAAA;EACA,0BAAA;ClD6qKH;AkD3qKG;;EAEE,eAAA;ClD6qKL;AkD/qKG;;EAKI,eAAA;ClD8qKP;AkD3qKK;;;;EAEE,eAAA;EACA,0BAAA;ClD+qKP;AkD7qKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClDkrKP;AkDxsKC;EACE,eAAA;EACA,0BAAA;ClD0sKH;AkDxsKG;;EAEE,eAAA;ClD0sKL;AkD5sKG;;EAKI,eAAA;ClD2sKP;AkDxsKK;;;;EAEE,eAAA;EACA,0BAAA;ClD4sKP;AkD1sKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClD+sKP;AkDruKC;EACE,eAAA;EACA,0BAAA;ClDuuKH;AkDruKG;;EAEE,eAAA;ClDuuKL;AkDzuKG;;EAKI,eAAA;ClDwuKP;AkDruKK;;;;EAEE,eAAA;EACA,0BAAA;ClDyuKP;AkDvuKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClD4uKP;AkDlwKC;EACE,eAAA;EACA,0BAAA;ClDowKH;AkDlwKG;;EAEE,eAAA;ClDowKL;AkDtwKG;;EAKI,eAAA;ClDqwKP;AkDlwKK;;;;EAEE,eAAA;EACA,0BAAA;ClDswKP;AkDpwKK;;;;;;EAGE,YAAA;EACA,0BAAA;EACA,sBAAA;ClDywKP;AiDxqKD;EACE,cAAA;EACA,mBAAA;CjD0qKD;AiDxqKD;EACE,iBAAA;EACA,iBAAA;CjD0qKD;AmDpyKD;EACE,oBAAA;EACA,uBAAA;EACA,8BAAA;EACA,mBAAA;E9C0DA,kDAAA;EACQ,0CAAA;CL6uKT;AmDnyKD;EACE,cAAA;CnDqyKD;AmDhyKD;EACE,mBAAA;EACA,qCAAA;EvBpBA,6BAAA;EACC,4BAAA;C5BuzKF;AmDtyKD;EAMI,eAAA;CnDmyKH;AmD9xKD;EACE,cAAA;EACA,iBAAA;EACA,gBAAA;EACA,eAAA;CnDgyKD;AmDpyKD;;;;;EAWI,eAAA;CnDgyKH;AmD3xKD;EACE,mBAAA;EACA,0BAAA;EACA,2BAAA;EvBxCA,gCAAA;EACC,+BAAA;C5Bs0KF;AmDrxKD;;EAGI,iBAAA;CnDsxKH;AmDzxKD;;EAMM,oBAAA;EACA,iBAAA;CnDuxKL;AmDnxKG;;EAEI,cAAA;EvBvEN,6BAAA;EACC,4BAAA;C5B61KF;AmDjxKG;;EAEI,iBAAA;EvBvEN,gCAAA;EACC,+BAAA;C5B21KF;AmD1yKD;EvB1DE,2BAAA;EACC,0BAAA;C5Bu2KF;AmD7wKD;EAEI,oBAAA;CnD8wKH;AmD3wKD;EACE,oBAAA;CnD6wKD;AmDrwKD;;;EAII,iBAAA;CnDswKH;AmD1wKD;;;EAOM,mBAAA;EACA,oBAAA;CnDwwKL;AmDhxKD;;EvBzGE,6BAAA;EACC,4BAAA;C5B63KF;AmDrxKD;;;;EAmBQ,4BAAA;EACA,6BAAA;CnDwwKP;AmD5xKD;;;;;;;;EAwBU,4BAAA;CnD8wKT;AmDtyKD;;;;;;;;EA4BU,6BAAA;CnDoxKT;AmDhzKD;;EvBjGE,gCAAA;EACC,+BAAA;C5Bq5KF;AmDrzKD;;;;EAyCQ,+BAAA;EACA,gCAAA;CnDkxKP;AmD5zKD;;;;;;;;EA8CU,+BAAA;CnDwxKT;AmDt0KD;;;;;;;;EAkDU,gCAAA;CnD8xKT;AmDh1KD;;;;EA2DI,2BAAA;CnD2xKH;AmDt1KD;;EA+DI,cAAA;CnD2xKH;AmD11KD;;EAmEI,UAAA;CnD2xKH;AmD91KD;;;;;;;;;;;;EA0EU,eAAA;CnDkyKT;AmD52KD;;;;;;;;;;;;EA8EU,gBAAA;CnD4yKT;AmD13KD;;;;;;;;EAuFU,iBAAA;CnD6yKT;AmDp4KD;;;;;;;;EAgGU,iBAAA;CnD8yKT;AmD94KD;EAsGI,UAAA;EACA,iBAAA;CnD2yKH;AmDjyKD;EACE,oBAAA;CnDmyKD;AmDpyKD;EAKI,iBAAA;EACA,mBAAA;CnDkyKH;AmDxyKD;EASM,gBAAA;CnDkyKL;AmD3yKD;EAcI,iBAAA;CnDgyKH;AmD9yKD;;EAkBM,2BAAA;CnDgyKL;AmDlzKD;EAuBI,cAAA;CnD8xKH;AmDrzKD;EAyBM,8BAAA;CnD+xKL;AmDxxKD;EC1PE,mBAAA;CpDqhLD;AoDnhLC;EACE,eAAA;EACA,0BAAA;EACA,mBAAA;CpDqhLH;AoDxhLC;EAMI,uBAAA;CpDqhLL;AoD3hLC;EASI,eAAA;EACA,0BAAA;CpDqhLL;AoDlhLC;EAEI,0BAAA;CpDmhLL;AmDvyKD;EC7PE,sBAAA;CpDuiLD;AoDriLC;EACE,YAAA;EACA,0BAAA;EACA,sBAAA;CpDuiLH;AoD1iLC;EAMI,0BAAA;CpDuiLL;AoD7iLC;EASI,eAAA;EACA,uBAAA;CpDuiLL;AoDpiLC;EAEI,6BAAA;CpDqiLL;AmDtzKD;EChQE,sBAAA;CpDyjLD;AoDvjLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpDyjLH;AoD5jLC;EAMI,0BAAA;CpDyjLL;AoD/jLC;EASI,eAAA;EACA,0BAAA;CpDyjLL;AoDtjLC;EAEI,6BAAA;CpDujLL;AmDr0KD;ECnQE,sBAAA;CpD2kLD;AoDzkLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpD2kLH;AoD9kLC;EAMI,0BAAA;CpD2kLL;AoDjlLC;EASI,eAAA;EACA,0BAAA;CpD2kLL;AoDxkLC;EAEI,6BAAA;CpDykLL;AmDp1KD;ECtQE,sBAAA;CpD6lLD;AoD3lLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpD6lLH;AoDhmLC;EAMI,0BAAA;CpD6lLL;AoDnmLC;EASI,eAAA;EACA,0BAAA;CpD6lLL;AoD1lLC;EAEI,6BAAA;CpD2lLL;AmDn2KD;ECzQE,sBAAA;CpD+mLD;AoD7mLC;EACE,eAAA;EACA,0BAAA;EACA,sBAAA;CpD+mLH;AoDlnLC;EAMI,0BAAA;CpD+mLL;AoDrnLC;EASI,eAAA;EACA,0BAAA;CpD+mLL;AoD5mLC;EAEI,6BAAA;CpD6mLL;AqD7nLD;EACE,mBAAA;EACA,eAAA;EACA,UAAA;EACA,WAAA;EACA,iBAAA;CrD+nLD;AqDpoLD;;;;;EAYI,mBAAA;EACA,OAAA;EACA,QAAA;EACA,UAAA;EACA,aAAA;EACA,YAAA;EACA,UAAA;CrD+nLH;AqD1nLD;EACE,uBAAA;CrD4nLD;AqDxnLD;EACE,oBAAA;CrD0nLD;AsDrpLD;EACE,iBAAA;EACA,cAAA;EACA,oBAAA;EACA,0BAAA;EACA,0BAAA;EACA,mBAAA;EjDwDA,wDAAA;EACQ,gDAAA;CLgmLT;AsD/pLD;EASI,mBAAA;EACA,kCAAA;CtDypLH;AsDppLD;EACE,cAAA;EACA,mBAAA;CtDspLD;AsDppLD;EACE,aAAA;EACA,mBAAA;CtDspLD;AuD5qLD;EACE,aAAA;EACA,gBAAA;EACA,kBAAA;EACA,eAAA;EACA,YAAA;EACA,0BAAA;EjCRA,aAAA;EAGA,0BAAA;CtBqrLD;AuD7qLC;;EAEE,YAAA;EACA,sBAAA;EACA,gBAAA;EjCfF,aAAA;EAGA,0BAAA;CtB6rLD;AuDzqLC;EACE,WAAA;EACA,gBAAA;EACA,wBAAA;EACA,UAAA;EACA,yBAAA;CvD2qLH;AwDhsLD;EACE,iBAAA;CxDksLD;AwD9rLD;EACE,cAAA;EACA,iBAAA;EACA,gBAAA;EACA,OAAA;EACA,SAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,kCAAA;EAIA,WAAA;CxD6rLD;AwD1rLC;EnD+GA,sCAAA;EACI,kCAAA;EACC,iCAAA;EACG,8BAAA;EAkER,oDAAA;EAEK,0CAAA;EACG,oCAAA;CL6gLT;AwDhsLC;EnD2GA,mCAAA;EACI,+BAAA;EACC,8BAAA;EACG,2BAAA;CLwlLT;AwDpsLD;EACE,mBAAA;EACA,iBAAA;CxDssLD;AwDlsLD;EACE,mBAAA;EACA,YAAA;EACA,aAAA;CxDosLD;AwDhsLD;EACE,mBAAA;EACA,uBAAA;EACA,uBAAA;EACA,qCAAA;EACA,mBAAA;EnDaA,iDAAA;EACQ,yCAAA;EmDZR,qCAAA;UAAA,6BAAA;EAEA,WAAA;CxDksLD;AwD9rLD;EACE,gBAAA;EACA,OAAA;EACA,SAAA;EACA,UAAA;EACA,QAAA;EACA,cAAA;EACA,uBAAA;CxDgsLD;AwD9rLC;ElCrEA,WAAA;EAGA,yBAAA;CtBowLD;AwDjsLC;ElCtEA,aAAA;EAGA,0BAAA;CtBwwLD;AwDhsLD;EACE,cAAA;EACA,iCAAA;CxDksLD;AwD9rLD;EACE,iBAAA;CxDgsLD;AwD5rLD;EACE,UAAA;EACA,wBAAA;CxD8rLD;AwDzrLD;EACE,mBAAA;EACA,cAAA;CxD2rLD;AwDvrLD;EACE,cAAA;EACA,kBAAA;EACA,8BAAA;CxDyrLD;AwD5rLD;EAQI,iBAAA;EACA,iBAAA;CxDurLH;AwDhsLD;EAaI,kBAAA;CxDsrLH;AwDnsLD;EAiBI,eAAA;CxDqrLH;AwDhrLD;EACE,mBAAA;EACA,aAAA;EACA,YAAA;EACA,aAAA;EACA,iBAAA;CxDkrLD;AwDhqLD;EAZE;IACE,aAAA;IACA,kBAAA;GxD+qLD;EwD7qLD;InDvEA,kDAAA;IACQ,0CAAA;GLuvLP;EwD5qLD;IAAY,aAAA;GxD+qLX;CACF;AwD1qLD;EAFE;IAAY,aAAA;GxDgrLX;CACF;AyD/zLD;EACE,mBAAA;EACA,cAAA;EACA,eAAA;ECRA,4DAAA;EAEA,mBAAA;EACA,oBAAA;EACA,uBAAA;EACA,iBAAA;EACA,wBAAA;EACA,iBAAA;EACA,kBAAA;EACA,sBAAA;EACA,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mBAAA;EACA,qBAAA;EACA,kBAAA;EDHA,gBAAA;EnCVA,WAAA;EAGA,yBAAA;CtBs1LD;AyD30LC;EnCdA,aAAA;EAGA,0BAAA;CtB01LD;AyD90LC;EAAW,iBAAA;EAAmB,eAAA;CzDk1L/B;AyDj1LC;EAAW,iBAAA;EAAmB,eAAA;CzDq1L/B;AyDp1LC;EAAW,gBAAA;EAAmB,eAAA;CzDw1L/B;AyDv1LC;EAAW,kBAAA;EAAmB,eAAA;CzD21L/B;AyDv1LD;EACE,iBAAA;EACA,iBAAA;EACA,YAAA;EACA,mBAAA;EACA,uBAAA;EACA,mBAAA;CzDy1LD;AyDr1LD;EACE,mBAAA;EACA,SAAA;EACA,UAAA;EACA,0BAAA;EACA,oBAAA;CzDu1LD;AyDn1LC;EACE,UAAA;EACA,UAAA;EACA,kBAAA;EACA,wBAAA;EACA,uBAAA;CzDq1LH;AyDn1LC;EACE,UAAA;EACA,WAAA;EACA,oBAAA;EACA,wBAAA;EACA,uBAAA;CzDq1LH;AyDn1LC;EACE,UAAA;EACA,UAAA;EACA,oBAAA;EACA,wBAAA;EACA,uBAAA;CzDq1LH;AyDn1LC;EACE,SAAA;EACA,QAAA;EACA,iBAAA;EACA,4BAAA;EACA,yBAAA;CzDq1LH;AyDn1LC;EACE,SAAA;EACA,SAAA;EACA,iBAAA;EACA,4BAAA;EACA,wBAAA;CzDq1LH;AyDn1LC;EACE,OAAA;EACA,UAAA;EACA,kBAAA;EACA,wBAAA;EACA,0BAAA;CzDq1LH;AyDn1LC;EACE,OAAA;EACA,WAAA;EACA,iBAAA;EACA,wBAAA;EACA,0BAAA;CzDq1LH;AyDn1LC;EACE,OAAA;EACA,UAAA;EACA,iBAAA;EACA,wBAAA;EACA,0BAAA;CzDq1LH;A2Dl7LD;EACE,mBAAA;EACA,OAAA;EACA,QAAA;EACA,cAAA;EACA,cAAA;EACA,iBAAA;EACA,aAAA;EDXA,4DAAA;EAEA,mBAAA;EACA,oBAAA;EACA,uBAAA;EACA,iBAAA;EACA,wBAAA;EACA,iBAAA;EACA,kBAAA;EACA,sBAAA;EACA,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mBAAA;EACA,qBAAA;EACA,kBAAA;ECAA,gBAAA;EAEA,uBAAA;EACA,qCAAA;UAAA,6BAAA;EACA,uBAAA;EACA,qCAAA;EACA,mBAAA;EtD8CA,kDAAA;EACQ,0CAAA;CLk5LT;A2D77LC;EAAY,kBAAA;C3Dg8Lb;A2D/7LC;EAAY,kBAAA;C3Dk8Lb;A2Dj8LC;EAAY,iBAAA;C3Do8Lb;A2Dn8LC;EAAY,mBAAA;C3Ds8Lb;A2Dn8LD;EACE,UAAA;EACA,kBAAA;EACA,gBAAA;EACA,0BAAA;EACA,iCAAA;EACA,2BAAA;C3Dq8LD;A2Dl8LD;EACE,kBAAA;C3Do8LD;A2D57LC;;EAEE,mBAAA;EACA,eAAA;EACA,SAAA;EACA,UAAA;EACA,0BAAA;EACA,oBAAA;C3D87LH;A2D37LD;EACE,mBAAA;C3D67LD;A2D37LD;EACE,mBAAA;EACA,YAAA;C3D67LD;A2Dz7LC;EACE,UAAA;EACA,mBAAA;EACA,uBAAA;EACA,0BAAA;EACA,sCAAA;EACA,cAAA;C3D27LH;A2D17LG;EACE,aAAA;EACA,YAAA;EACA,mBAAA;EACA,uBAAA;EACA,uBAAA;C3D47LL;A2Dz7LC;EACE,SAAA;EACA,YAAA;EACA,kBAAA;EACA,qBAAA;EACA,4BAAA;EACA,wCAAA;C3D27LH;A2D17LG;EACE,aAAA;EACA,UAAA;EACA,cAAA;EACA,qBAAA;EACA,yBAAA;C3D47LL;A2Dz7LC;EACE,UAAA;EACA,mBAAA;EACA,oBAAA;EACA,6BAAA;EACA,yCAAA;EACA,WAAA;C3D27LH;A2D17LG;EACE,aAAA;EACA,SAAA;EACA,mBAAA;EACA,oBAAA;EACA,0BAAA;C3D47LL;A2Dx7LC;EACE,SAAA;EACA,aAAA;EACA,kBAAA;EACA,sBAAA;EACA,2BAAA;EACA,uCAAA;C3D07LH;A2Dz7LG;EACE,aAAA;EACA,WAAA;EACA,sBAAA;EACA,wBAAA;EACA,cAAA;C3D27LL;A4DpjMD;EACE,mBAAA;C5DsjMD;A4DnjMD;EACE,mBAAA;EACA,iBAAA;EACA,YAAA;C5DqjMD;A4DxjMD;EAMI,cAAA;EACA,mBAAA;EvD6KF,0CAAA;EACK,qCAAA;EACG,kCAAA;CLy4LT;A4D/jMD;;EAcM,eAAA;C5DqjML;A4D3hMC;EA4NF;IvD3DE,uDAAA;IAEK,6CAAA;IACG,uCAAA;IA7JR,oCAAA;IAEQ,4BAAA;IA+GR,4BAAA;IAEQ,oBAAA;GL86LP;E4DzjMG;;IvDmHJ,2CAAA;IACQ,mCAAA;IuDjHF,QAAA;G5D4jML;E4D1jMG;;IvD8GJ,4CAAA;IACQ,oCAAA;IuD5GF,QAAA;G5D6jML;E4D3jMG;;;IvDyGJ,wCAAA;IACQ,gCAAA;IuDtGF,QAAA;G5D8jML;CACF;A4DpmMD;;;EA6CI,eAAA;C5D4jMH;A4DzmMD;EAiDI,QAAA;C5D2jMH;A4D5mMD;;EAsDI,mBAAA;EACA,OAAA;EACA,YAAA;C5D0jMH;A4DlnMD;EA4DI,WAAA;C5DyjMH;A4DrnMD;EA+DI,YAAA;C5DyjMH;A4DxnMD;;EAmEI,QAAA;C5DyjMH;A4D5nMD;EAuEI,YAAA;C5DwjMH;A4D/nMD;EA0EI,WAAA;C5DwjMH;A4DhjMD;EACE,mBAAA;EACA,OAAA;EACA,QAAA;EACA,UAAA;EACA,WAAA;EtC9FA,aAAA;EAGA,0BAAA;EsC6FA,gBAAA;EACA,YAAA;EACA,mBAAA;EACA,0CAAA;EACA,mCAAA;C5DmjMD;A4D9iMC;EdnGE,mGAAA;EACA,8FAAA;EACA,qHAAA;EAAA,+FAAA;EACA,4BAAA;EACA,uHAAA;C9CopMH;A4DljMC;EACE,WAAA;EACA,SAAA;EdxGA,mGAAA;EACA,8FAAA;EACA,qHAAA;EAAA,+FAAA;EACA,4BAAA;EACA,uHAAA;C9C6pMH;A4DpjMC;;EAEE,WAAA;EACA,YAAA;EACA,sBAAA;EtCvHF,aAAA;EAGA,0BAAA;CtB4qMD;A4DtlMD;;;;EAuCI,mBAAA;EACA,SAAA;EACA,kBAAA;EACA,WAAA;EACA,sBAAA;C5DqjMH;A4DhmMD;;EA+CI,UAAA;EACA,mBAAA;C5DqjMH;A4DrmMD;;EAoDI,WAAA;EACA,oBAAA;C5DqjMH;A4D1mMD;;EAyDI,YAAA;EACA,aAAA;EACA,eAAA;EACA,mBAAA;C5DqjMH;A4DhjMG;EACE,iBAAA;C5DkjML;A4D9iMG;EACE,iBAAA;C5DgjML;A4DtiMD;EACE,mBAAA;EACA,aAAA;EACA,UAAA;EACA,YAAA;EACA,WAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,mBAAA;C5DwiMD;A4DjjMD;EAYI,sBAAA;EACA,YAAA;EACA,aAAA;EACA,YAAA;EACA,oBAAA;EACA,uBAAA;EACA,oBAAA;EACA,gBAAA;EAWA,0BAAA;EACA,mCAAA;C5D8hMH;A4D7jMD;EAkCI,UAAA;EACA,YAAA;EACA,aAAA;EACA,uBAAA;C5D8hMH;A4DvhMD;EACE,mBAAA;EACA,UAAA;EACA,WAAA;EACA,aAAA;EACA,YAAA;EACA,kBAAA;EACA,qBAAA;EACA,YAAA;EACA,mBAAA;EACA,0CAAA;C5DyhMD;A4DxhMC;EACE,kBAAA;C5D0hMH;A4Dj/LD;EAhCE;;;;IAKI,YAAA;IACA,aAAA;IACA,kBAAA;IACA,gBAAA;G5DmhMH;E4D3hMD;;IAYI,mBAAA;G5DmhMH;E4D/hMD;;IAgBI,oBAAA;G5DmhMH;E4D9gMD;IACE,UAAA;IACA,WAAA;IACA,qBAAA;G5DghMD;E4D5gMD;IACE,aAAA;G5D8gMD;CACF;A6D7wMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEE,aAAA;EACA,eAAA;C7D6yMH;A6D3yMC;;;;;;;;;;;;;;;;EACE,YAAA;C7D4zMH;AiCp0MD;E6BRE,eAAA;EACA,kBAAA;EACA,mBAAA;C9D+0MD;AiCt0MD;EACE,wBAAA;CjCw0MD;AiCt0MD;EACE,uBAAA;CjCw0MD;AiCh0MD;EACE,yBAAA;CjCk0MD;AiCh0MD;EACE,0BAAA;CjCk0MD;AiCh0MD;EACE,mBAAA;CjCk0MD;AiCh0MD;E8BzBE,YAAA;EACA,mBAAA;EACA,kBAAA;EACA,8BAAA;EACA,UAAA;C/D41MD;AiC9zMD;EACE,yBAAA;CjCg0MD;AiCzzMD;EACE,gBAAA;CjC2zMD;AgE51MD;EACE,oBAAA;ChE81MD;AgEx1MD;;;;ECdE,yBAAA;CjE42MD;AgEv1MD;;;;;;;;;;;;EAYE,yBAAA;ChEy1MD;AgEl1MD;EA6IA;IC7LE,0BAAA;GjEs4MC;EiEr4MD;IAAU,0BAAA;GjEw4MT;EiEv4MD;IAAU,8BAAA;GjE04MT;EiEz4MD;;IACU,+BAAA;GjE44MT;CACF;AgE51MD;EAwIA;IA1II,0BAAA;GhEk2MD;CACF;AgE51MD;EAmIA;IArII,2BAAA;GhEk2MD;CACF;AgE51MD;EA8HA;IAhII,iCAAA;GhEk2MD;CACF;AgE31MD;EAwHA;IC7LE,0BAAA;GjEo6MC;EiEn6MD;IAAU,0BAAA;GjEs6MT;EiEr6MD;IAAU,8BAAA;GjEw6MT;EiEv6MD;;IACU,+BAAA;GjE06MT;CACF;AgEr2MD;EAmHA;IArHI,0BAAA;GhE22MD;CACF;AgEr2MD;EA8GA;IAhHI,2BAAA;GhE22MD;CACF;AgEr2MD;EAyGA;IA3GI,iCAAA;GhE22MD;CACF;AgEp2MD;EAmGA;IC7LE,0BAAA;GjEk8MC;EiEj8MD;IAAU,0BAAA;GjEo8MT;EiEn8MD;IAAU,8BAAA;GjEs8MT;EiEr8MD;;IACU,+BAAA;GjEw8MT;CACF;AgE92MD;EA8FA;IAhGI,0BAAA;GhEo3MD;CACF;AgE92MD;EAyFA;IA3FI,2BAAA;GhEo3MD;CACF;AgE92MD;EAoFA;IAtFI,iCAAA;GhEo3MD;CACF;AgE72MD;EA8EA;IC7LE,0BAAA;GjEg+MC;EiE/9MD;IAAU,0BAAA;GjEk+MT;EiEj+MD;IAAU,8BAAA;GjEo+MT;EiEn+MD;;IACU,+BAAA;GjEs+MT;CACF;AgEv3MD;EAyEA;IA3EI,0BAAA;GhE63MD;CACF;AgEv3MD;EAoEA;IAtEI,2BAAA;GhE63MD;CACF;AgEv3MD;EA+DA;IAjEI,iCAAA;GhE63MD;CACF;AgEt3MD;EAyDA;ICrLE,yBAAA;GjEs/MC;CACF;AgEt3MD;EAoDA;ICrLE,yBAAA;GjE2/MC;CACF;AgEt3MD;EA+CA;ICrLE,yBAAA;GjEggNC;CACF;AgEt3MD;EA0CA;ICrLE,yBAAA;GjEqgNC;CACF;AgEn3MD;ECnJE,yBAAA;CjEygND;AgEh3MD;EA4BA;IC7LE,0BAAA;GjEqhNC;EiEphND;IAAU,0BAAA;GjEuhNT;EiEthND;IAAU,8BAAA;GjEyhNT;EiExhND;;IACU,+BAAA;GjE2hNT;CACF;AgE93MD;EACE,yBAAA;ChEg4MD;AgE33MD;EAqBA;IAvBI,0BAAA;GhEi4MD;CACF;AgE/3MD;EACE,yBAAA;ChEi4MD;AgE53MD;EAcA;IAhBI,2BAAA;GhEk4MD;CACF;AgEh4MD;EACE,yBAAA;ChEk4MD;AgE73MD;EAOA;IATI,iCAAA;GhEm4MD;CACF;AgE53MD;EACA;ICrLE,yBAAA;GjEojNC;CACF","file":"bootstrap.css","sourcesContent":["/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n[hidden],\ntemplate {\n display: none;\n}\na {\n background-color: transparent;\n}\na:active,\na:hover {\n outline: 0;\n}\nabbr[title] {\n border-bottom: 1px dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\nmark {\n background: #ff0;\n color: #000;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsup {\n top: -0.5em;\n}\nsub {\n bottom: -0.25em;\n}\nimg {\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n box-sizing: content-box;\n height: 0;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0;\n}\nbutton {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\ninput {\n line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n border: 0;\n padding: 0;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\ntd,\nth {\n padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('../fonts/glyphicons-halflings-regular.eot');\n src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\002a\";\n}\n.glyphicon-plus:before {\n content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n.glyphicon-cd:before {\n content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n content: \"\\e204\";\n}\n.glyphicon-copy:before {\n content: \"\\e205\";\n}\n.glyphicon-paste:before {\n content: \"\\e206\";\n}\n.glyphicon-alert:before {\n content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n content: \"\\e210\";\n}\n.glyphicon-king:before {\n content: \"\\e211\";\n}\n.glyphicon-queen:before {\n content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n content: \"\\e214\";\n}\n.glyphicon-knight:before {\n content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n content: \"\\e216\";\n}\n.glyphicon-tent:before {\n content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n content: \"\\e218\";\n}\n.glyphicon-bed:before {\n content: \"\\e219\";\n}\n.glyphicon-apple:before {\n content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n content: \"\\e227\";\n}\n.glyphicon-btc:before {\n content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n content: \"\\e227\";\n}\n.glyphicon-yen:before {\n content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n content: \"\\e232\";\n}\n.glyphicon-education:before {\n content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n content: \"\\e237\";\n}\n.glyphicon-oil:before {\n content: \"\\e238\";\n}\n.glyphicon-grain:before {\n content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n content: \"\\e253\";\n}\n.glyphicon-console:before {\n content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n content: \"\\e260\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333333;\n background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #337ab7;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #23527c;\n text-decoration: underline;\n}\na:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n padding: 4px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n[role=\"button\"] {\n cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: normal;\n line-height: 1;\n color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n background-color: #fcf8e3;\n padding: .2em;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777777;\n}\n.text-primary {\n color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n color: #286090;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n background-color: #286090;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n.list-inline > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted #777777;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n text-align: right;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: '\\00A0 \\2014';\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #fff;\n background-color: #333;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n word-break: break-all;\n word-wrap: break-word;\n color: #333333;\n background-color: #f5f5f5;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n.row {\n margin-left: -15px;\n margin-right: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n@media (min-width: 768px) {\n .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 992px) {\n .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 1200px) {\n .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n}\ntable {\n background-color: transparent;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #ddd;\n}\n.table .table {\n background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-column;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-cell;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #ddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n min-width: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n color: #999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999;\n}\n.form-control::-ms-expand {\n border: 0;\n background-color: transparent;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n}\ntextarea.form-control {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"].form-control,\n input[type=\"time\"].form-control,\n input[type=\"datetime-local\"].form-control,\n input[type=\"month\"].form-control {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm,\n .input-group-sm input[type=\"date\"],\n .input-group-sm input[type=\"time\"],\n .input-group-sm input[type=\"datetime-local\"],\n .input-group-sm input[type=\"month\"] {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg,\n .input-group-lg input[type=\"date\"],\n .input-group-lg input[type=\"time\"],\n .input-group-lg input[type=\"datetime-local\"],\n .input-group-lg input[type=\"month\"] {\n line-height: 46px;\n }\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.form-control-static {\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n min-height: 34px;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-left: 0;\n padding-right: 0;\n}\n.input-sm {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n height: auto;\n}\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.form-group-sm select.form-control {\n height: 30px;\n line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n height: auto;\n}\n.form-group-sm .form-control-static {\n height: 30px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.input-lg {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-lg {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n height: auto;\n}\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.form-group-lg select.form-control {\n height: 46px;\n line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n height: auto;\n}\n.form-group-lg .form-control-static {\n height: 46px;\n min-height: 38px;\n padding: 11px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n border-color: #3c763d;\n background-color: #dff0d8;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n border-color: #8a6d3b;\n background-color: #fcf8e3;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n border-color: #a94442;\n background-color: #f2dede;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 7px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-left: -15px;\n margin-right: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: 7px;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 11px;\n font-size: 18px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n font-size: 12px;\n }\n}\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n white-space: nowrap;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n outline: 0;\n background-image: none;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n opacity: 0.65;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n pointer-events: none;\n}\n.btn-default {\n color: #333;\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n color: #333;\n background-color: #e6e6e6;\n border-color: #8c8c8c;\n}\n.btn-default:hover {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n color: #333;\n background-color: #d4d4d4;\n border-color: #8c8c8c;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n background-image: none;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default .badge {\n color: #fff;\n background-color: #333;\n}\n.btn-primary {\n color: #fff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n color: #fff;\n background-color: #286090;\n border-color: #122b40;\n}\n.btn-primary:hover {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n color: #fff;\n background-color: #204d74;\n border-color: #122b40;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n background-image: none;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.btn-success {\n color: #fff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n color: #fff;\n background-color: #449d44;\n border-color: #255625;\n}\n.btn-success:hover {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n color: #fff;\n background-color: #398439;\n border-color: #255625;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n background-image: none;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #fff;\n}\n.btn-info {\n color: #fff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n color: #fff;\n background-color: #31b0d5;\n border-color: #1b6d85;\n}\n.btn-info:hover {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n color: #fff;\n background-color: #269abc;\n border-color: #1b6d85;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n background-image: none;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #fff;\n}\n.btn-warning {\n color: #fff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n color: #fff;\n background-color: #ec971f;\n border-color: #985f0d;\n}\n.btn-warning:hover {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n color: #fff;\n background-color: #d58512;\n border-color: #985f0d;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n background-image: none;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #fff;\n}\n.btn-danger {\n color: #fff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n color: #fff;\n background-color: #c9302c;\n border-color: #761c19;\n}\n.btn-danger:hover {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n color: #fff;\n background-color: #ac2925;\n border-color: #761c19;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n background-image: none;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #fff;\n}\n.btn-link {\n color: #337ab7;\n font-weight: normal;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n}\n.collapse.in {\n display: block;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-top: 4px solid \\9;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n list-style: none;\n font-size: 14px;\n text-align: left;\n background-color: #fff;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n background-clip: padding-box;\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: 1.42857143;\n color: #333333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n text-decoration: none;\n color: #262626;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n background-color: #337ab7;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n cursor: not-allowed;\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n left: auto;\n right: 0;\n}\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n border-top: 0;\n border-bottom: 4px dashed;\n border-bottom: 4px solid \\9;\n content: \"\";\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n left: auto;\n right: 0;\n }\n .navbar-right .dropdown-menu-left {\n left: 0;\n right: auto;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group .form-control:focus {\n z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n z-index: 2;\n margin-left: -1px;\n}\n.nav {\n margin-bottom: 0;\n padding-left: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #337ab7;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555555;\n background-color: #fff;\n border: 1px solid #ddd;\n border-bottom-color: transparent;\n cursor: default;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #fff;\n background-color: #337ab7;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n overflow-x: visible;\n padding-right: 15px;\n padding-left: 15px;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-left: 0;\n padding-right: 0;\n }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.navbar-brand {\n float: left;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n height: 50px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: 15px;\n padding: 9px 10px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n margin-left: -15px;\n margin-right: -15px;\n padding: 10px 15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-left: 15px;\n margin-right: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n background-color: #e7e7e7;\n color: #555;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-link {\n color: #777;\n}\n.navbar-default .navbar-link:hover {\n color: #333;\n}\n.navbar-default .btn-link {\n color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #ccc;\n}\n.navbar-inverse {\n background-color: #222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #fff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n background-color: #080808;\n color: #fff;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #fff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #fff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n content: \"/\\00a0\";\n padding: 0 5px;\n color: #ccc;\n}\n.breadcrumb > .active {\n color: #777777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n line-height: 1.42857143;\n text-decoration: none;\n color: #337ab7;\n background-color: #fff;\n border: 1px solid #ddd;\n margin-left: -1px;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-bottom-left-radius: 4px;\n border-top-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-bottom-right-radius: 4px;\n border-top-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n z-index: 2;\n color: #23527c;\n background-color: #eeeeee;\n border-color: #ddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 3;\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n cursor: default;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777777;\n background-color: #fff;\n border-color: #ddd;\n cursor: not-allowed;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-bottom-left-radius: 6px;\n border-top-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-bottom-right-radius: 6px;\n border-top-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-bottom-left-radius: 3px;\n border-top-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n list-style: none;\n text-align: center;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777777;\n background-color: #fff;\n cursor: not-allowed;\n}\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #286090;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n color: #fff;\n line-height: 1;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: #777777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding-top: 30px;\n padding-bottom: 30px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n border-radius: 6px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding-top: 48px;\n padding-bottom: 48px;\n }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-left: 60px;\n padding-right: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-left: auto;\n margin-right: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #337ab7;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n background-color: #dff0d8;\n border-color: #d6e9c6;\n color: #3c763d;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n background-color: #d9edf7;\n border-color: #bce8f1;\n color: #31708f;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n background-color: #fcf8e3;\n border-color: #faebcc;\n color: #8a6d3b;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n background-color: #f2dede;\n border-color: #ebccd1;\n color: #a94442;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n overflow: hidden;\n height: 20px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #fff;\n text-align: center;\n background-color: #337ab7;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n.media-body {\n width: 10000px;\n}\n.media-object {\n display: block;\n}\n.media-object.img-thumbnail {\n max-width: none;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n margin-bottom: 20px;\n padding-left: 0;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\na.list-group-item,\nbutton.list-group-item {\n color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n text-decoration: none;\n color: #555;\n background-color: #f5f5f5;\n}\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n background-color: #eeeeee;\n color: #777777;\n cursor: not-allowed;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #c7ddef;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #fff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #ddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-left: 15px;\n padding-right: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n border: 0;\n margin-bottom: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #ddd;\n}\n.panel-default {\n border-color: #ddd;\n}\n.panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ddd;\n}\n.panel-primary {\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #337ab7;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n}\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: 0.2;\n filter: alpha(opacity=20);\n}\n.close:hover,\n.close:focus {\n color: #000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #fff;\n border: 1px solid #999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-clip: padding-box;\n outline: 0;\n}\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000;\n}\n.modal-backdrop.fade {\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.modal-backdrop.in {\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 12px;\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.tooltip.in {\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.tooltip.top {\n margin-top: -3px;\n padding: 5px 0;\n}\n.tooltip.right {\n margin-left: 3px;\n padding: 0 5px;\n}\n.tooltip.bottom {\n margin-top: 3px;\n padding: 5px 0;\n}\n.tooltip.left {\n margin-left: -3px;\n padding: 0 5px;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n bottom: 0;\n right: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 14px;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover-title {\n margin: 0;\n padding: 8px 14px;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow:after {\n border-width: 10px;\n content: \"\";\n}\n.popover.top > .arrow {\n left: 50%;\n margin-left: -11px;\n border-bottom-width: 0;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n bottom: -11px;\n}\n.popover.top > .arrow:after {\n content: \" \";\n bottom: 1px;\n margin-left: -10px;\n border-bottom-width: 0;\n border-top-color: #fff;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-left-width: 0;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n.popover.right > .arrow:after {\n content: \" \";\n left: 1px;\n bottom: -10px;\n border-left-width: 0;\n border-right-color: #fff;\n}\n.popover.bottom > .arrow {\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n top: -11px;\n}\n.popover.bottom > .arrow:after {\n content: \" \";\n top: 1px;\n margin-left: -10px;\n border-top-width: 0;\n border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: #fff;\n bottom: -10px;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n}\n.carousel-inner > .item {\n display: none;\n position: relative;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform 0.6s ease-in-out;\n -moz-transition: -moz-transform 0.6s ease-in-out;\n -o-transition: -o-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000px;\n -moz-perspective: 1000px;\n perspective: 1000px;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 15%;\n opacity: 0.5;\n filter: alpha(opacity=50);\n font-size: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n}\n.carousel-control.right {\n left: auto;\n right: 0;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n}\n.carousel-control:hover,\n.carousel-control:focus {\n outline: 0;\n color: #fff;\n text-decoration: none;\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n margin-top: -10px;\n z-index: 5;\n display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n line-height: 1;\n font-family: serif;\n}\n.carousel-control .icon-prev:before {\n content: '\\2039';\n}\n.carousel-control .icon-next:before {\n content: '\\203a';\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid #fff;\n border-radius: 10px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-indicators .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: #fff;\n}\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -10px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -10px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -10px;\n }\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n content: \" \";\n display: table;\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table !important;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table !important;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table !important;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table !important;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table !important;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS and IE text size adjust after device orientation change,\n// without disabling user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background-color: transparent;\n}\n\n//\n// Improve readability of focused elements when they are also in an\n// active/hover state.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome.\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n box-sizing: content-box; //2\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n box-shadow: none !important;\n text-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n // Bootstrap specific changes end\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// <a href=\"#\"><span class=\"glyphicon glyphicon-star\"></span> Star</a>\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('@{icon-font-path}@{icon-font-name}.eot');\n src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n url('@{icon-font-path}@{icon-font-name}.woff2') format('woff2'),\n url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\002a\"; } }\n.glyphicon-plus { &:before { content: \"\\002b\"; } }\n.glyphicon-euro,\n.glyphicon-eur { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n.glyphicon-cd { &:before { content: \"\\e201\"; } }\n.glyphicon-save-file { &:before { content: \"\\e202\"; } }\n.glyphicon-open-file { &:before { content: \"\\e203\"; } }\n.glyphicon-level-up { &:before { content: \"\\e204\"; } }\n.glyphicon-copy { &:before { content: \"\\e205\"; } }\n.glyphicon-paste { &:before { content: \"\\e206\"; } }\n// The following 2 Glyphicons are omitted for the time being because\n// they currently use Unicode codepoints that are outside the\n// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle\n// non-BMP codepoints in CSS string escapes, and thus can't display these two icons.\n// Notably, the bug affects some older versions of the Android Browser.\n// More info: https://github.com/twbs/bootstrap/issues/10106\n// .glyphicon-door { &:before { content: \"\\1f6aa\"; } }\n// .glyphicon-key { &:before { content: \"\\1f511\"; } }\n.glyphicon-alert { &:before { content: \"\\e209\"; } }\n.glyphicon-equalizer { &:before { content: \"\\e210\"; } }\n.glyphicon-king { &:before { content: \"\\e211\"; } }\n.glyphicon-queen { &:before { content: \"\\e212\"; } }\n.glyphicon-pawn { &:before { content: \"\\e213\"; } }\n.glyphicon-bishop { &:before { content: \"\\e214\"; } }\n.glyphicon-knight { &:before { content: \"\\e215\"; } }\n.glyphicon-baby-formula { &:before { content: \"\\e216\"; } }\n.glyphicon-tent { &:before { content: \"\\26fa\"; } }\n.glyphicon-blackboard { &:before { content: \"\\e218\"; } }\n.glyphicon-bed { &:before { content: \"\\e219\"; } }\n.glyphicon-apple { &:before { content: \"\\f8ff\"; } }\n.glyphicon-erase { &:before { content: \"\\e221\"; } }\n.glyphicon-hourglass { &:before { content: \"\\231b\"; } }\n.glyphicon-lamp { &:before { content: \"\\e223\"; } }\n.glyphicon-duplicate { &:before { content: \"\\e224\"; } }\n.glyphicon-piggy-bank { &:before { content: \"\\e225\"; } }\n.glyphicon-scissors { &:before { content: \"\\e226\"; } }\n.glyphicon-bitcoin { &:before { content: \"\\e227\"; } }\n.glyphicon-btc { &:before { content: \"\\e227\"; } }\n.glyphicon-xbt { &:before { content: \"\\e227\"; } }\n.glyphicon-yen { &:before { content: \"\\00a5\"; } }\n.glyphicon-jpy { &:before { content: \"\\00a5\"; } }\n.glyphicon-ruble { &:before { content: \"\\20bd\"; } }\n.glyphicon-rub { &:before { content: \"\\20bd\"; } }\n.glyphicon-scale { &:before { content: \"\\e230\"; } }\n.glyphicon-ice-lolly { &:before { content: \"\\e231\"; } }\n.glyphicon-ice-lolly-tasted { &:before { content: \"\\e232\"; } }\n.glyphicon-education { &:before { content: \"\\e233\"; } }\n.glyphicon-option-horizontal { &:before { content: \"\\e234\"; } }\n.glyphicon-option-vertical { &:before { content: \"\\e235\"; } }\n.glyphicon-menu-hamburger { &:before { content: \"\\e236\"; } }\n.glyphicon-modal-window { &:before { content: \"\\e237\"; } }\n.glyphicon-oil { &:before { content: \"\\e238\"; } }\n.glyphicon-grain { &:before { content: \"\\e239\"; } }\n.glyphicon-sunglasses { &:before { content: \"\\e240\"; } }\n.glyphicon-text-size { &:before { content: \"\\e241\"; } }\n.glyphicon-text-color { &:before { content: \"\\e242\"; } }\n.glyphicon-text-background { &:before { content: \"\\e243\"; } }\n.glyphicon-object-align-top { &:before { content: \"\\e244\"; } }\n.glyphicon-object-align-bottom { &:before { content: \"\\e245\"; } }\n.glyphicon-object-align-horizontal{ &:before { content: \"\\e246\"; } }\n.glyphicon-object-align-left { &:before { content: \"\\e247\"; } }\n.glyphicon-object-align-vertical { &:before { content: \"\\e248\"; } }\n.glyphicon-object-align-right { &:before { content: \"\\e249\"; } }\n.glyphicon-triangle-right { &:before { content: \"\\e250\"; } }\n.glyphicon-triangle-left { &:before { content: \"\\e251\"; } }\n.glyphicon-triangle-bottom { &:before { content: \"\\e252\"; } }\n.glyphicon-triangle-top { &:before { content: \"\\e253\"; } }\n.glyphicon-console { &:before { content: \"\\e254\"; } }\n.glyphicon-superscript { &:before { content: \"\\e255\"; } }\n.glyphicon-subscript { &:before { content: \"\\e256\"; } }\n.glyphicon-menu-left { &:before { content: \"\\e257\"; } }\n.glyphicon-menu-right { &:before { content: \"\\e258\"; } }\n.glyphicon-menu-down { &:before { content: \"\\e259\"; } }\n.glyphicon-menu-up { &:before { content: \"\\e260\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n\n\n// iOS \"clickable elements\" fix for role=\"button\"\n//\n// Fixes \"clickability\" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\"button\"\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n[role=\"button\"] {\n cursor: pointer;\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // WebKit-specific. Other browsers will keep their default outline style.\n // (Initially tried to also force default via `outline: initial`,\n // but that seems to erroneously remove the outline in Firefox altogether.)\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\nmark,\n.mark {\n background-color: @state-warning-bg;\n padding: .2em;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @dl-horizontal-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n .text-uppercase();\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover,\n a&:focus {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover,\n a&:focus {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n margin-right: auto;\n margin-left: auto;\n padding-left: floor((@gutter / 2));\n padding-right: ceil((@gutter / 2));\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: ceil((@gutter / -2));\n margin-right: floor((@gutter / -2));\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: ceil((@grid-gutter-width / 2));\n padding-right: floor((@grid-gutter-width / 2));\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n}\ncaption {\n padding-top: @table-cell-padding;\n padding-bottom: @table-cell-padding;\n color: @text-muted;\n text-align: left;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-of-type(odd) {\n background-color: @table-bg-accent;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n background-color: @table-bg-hover;\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * 0.75);\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n}\n\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius; // Note: This has no effect on <select>s in some browsers, due to the limited stylability of <select>s in CSS.\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Unstyle the caret on `<select>`s in IE10+.\n &::-ms-expand {\n border: 0;\n background-color: transparent;\n }\n\n // Disabled and read-only inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &[disabled],\n &[readonly],\n fieldset[disabled] & {\n background-color: @input-bg-disabled;\n opacity: 1; // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655\n }\n\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n\n // Reset height for `textarea`s\n textarea& {\n height: auto;\n }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n\n\n// Special styles for iOS temporal inputs\n//\n// In Mobile Safari, setting `display: block` on temporal inputs causes the\n// text within the input to become vertically misaligned. As a workaround, we\n// set a pixel line-height that matches the given height of the input, but only\n// for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848\n//\n// Note that as of 9.3, iOS doesn't support `week`.\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"],\n input[type=\"time\"],\n input[type=\"datetime-local\"],\n input[type=\"month\"] {\n &.form-control {\n line-height: @input-height-base;\n }\n\n &.input-sm,\n .input-group-sm & {\n line-height: @input-height-small;\n }\n\n &.input-lg,\n .input-group-lg & {\n line-height: @input-height-large;\n }\n }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n margin-bottom: @form-group-margin-bottom;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n\n label {\n min-height: @line-height-computed; // Ensure the input doesn't jump when there is no text\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n// Some special care is needed because <label>s don't inherit their parent's `cursor`.\n//\n// Note: Neither radios nor checkboxes can be readonly.\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n &[disabled],\n &.disabled,\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n}\n// These classes are used directly on <label>s\n.radio-inline,\n.checkbox-inline {\n &.disabled,\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n}\n// These classes are used on elements with <label> descendants\n.radio,\n.checkbox {\n &.disabled,\n fieldset[disabled] & {\n label {\n cursor: @cursor-disabled;\n }\n }\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n // Size it appropriately next to real form controls\n padding-top: (@padding-base-vertical + 1);\n padding-bottom: (@padding-base-vertical + 1);\n // Remove default margin from `p`\n margin-bottom: 0;\n min-height: (@line-height-computed + @font-size-base);\n\n &.input-lg,\n &.input-sm {\n padding-left: 0;\n padding-right: 0;\n }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// The `.form-group-* form-control` variations are sadly duplicated to avoid the\n// issue documented in https://github.com/twbs/bootstrap/issues/15074.\n\n.input-sm {\n .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @input-border-radius-small);\n}\n.form-group-sm {\n .form-control {\n height: @input-height-small;\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n line-height: @line-height-small;\n border-radius: @input-border-radius-small;\n }\n select.form-control {\n height: @input-height-small;\n line-height: @input-height-small;\n }\n textarea.form-control,\n select[multiple].form-control {\n height: auto;\n }\n .form-control-static {\n height: @input-height-small;\n min-height: (@line-height-computed + @font-size-small);\n padding: (@padding-small-vertical + 1) @padding-small-horizontal;\n font-size: @font-size-small;\n line-height: @line-height-small;\n }\n}\n\n.input-lg {\n .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @input-border-radius-large);\n}\n.form-group-lg {\n .form-control {\n height: @input-height-large;\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-large;\n border-radius: @input-border-radius-large;\n }\n select.form-control {\n height: @input-height-large;\n line-height: @input-height-large;\n }\n textarea.form-control,\n select[multiple].form-control {\n height: auto;\n }\n .form-control-static {\n height: @input-height-large;\n min-height: (@line-height-computed + @font-size-large);\n padding: (@padding-large-vertical + 1) @padding-large-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-large;\n }\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n.has-feedback {\n // Enable absolute positioning\n position: relative;\n\n // Ensure icons don't overlap text\n .form-control {\n padding-right: (@input-height-base * 1.25);\n }\n}\n// Feedback icon (requires .glyphicon classes)\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2; // Ensure icon is above input groups\n display: block;\n width: @input-height-base;\n height: @input-height-base;\n line-height: @input-height-base;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: @input-height-large;\n height: @input-height-large;\n line-height: @input-height-large;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: @input-height-small;\n height: @input-height-small;\n line-height: @input-height-small;\n}\n\n// Feedback states\n.has-success {\n .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n.has-warning {\n .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n.has-error {\n .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\n}\n\n// Reposition feedback icon if input has visible label above\n.has-feedback label {\n\n & ~ .form-control-feedback {\n top: (@line-height-computed + 5); // Height of the `label` and its margin\n }\n &.sr-only ~ .form-control-feedback {\n top: 0;\n }\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n display: block; // account for any element using help-block\n margin-top: 5px;\n margin-bottom: 10px;\n color: lighten(@text-color, 25%); // lighten the text some for contrast\n}\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n\n // Kick in the inline\n @media (min-width: @screen-sm-min) {\n // Inline-block all the things for \"inline\"\n .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n\n // In navbar-form, allow folks to *not* use `.form-group`\n .form-control {\n display: inline-block;\n width: auto; // Prevent labels from stacking above inputs in `.form-group`\n vertical-align: middle;\n }\n\n // Make static controls behave like regular ones\n .form-control-static {\n display: inline-block;\n }\n\n .input-group {\n display: inline-table;\n vertical-align: middle;\n\n .input-group-addon,\n .input-group-btn,\n .form-control {\n width: auto;\n }\n }\n\n // Input groups need that 100% width though\n .input-group > .form-control {\n width: 100%;\n }\n\n .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n\n // Remove default margin on radios/checkboxes that were used for stacking, and\n // then undo the floating of radios and checkboxes to match.\n .radio,\n .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n\n label {\n padding-left: 0;\n }\n }\n .radio input[type=\"radio\"],\n .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n\n // Re-override the feedback icon.\n .has-feedback .form-control-feedback {\n top: 0;\n }\n }\n}\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n // Consistent vertical alignment of radios and checkboxes\n //\n // Labels also get some reset styles, but that is scoped to a media query below.\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n }\n // Account for padding we're adding to ensure the alignment and of help text\n // and other content below items\n .radio,\n .checkbox {\n min-height: (@line-height-computed + (@padding-base-vertical + 1));\n }\n\n // Make form groups behave like rows\n .form-group {\n .make-row();\n }\n\n // Reset spacing and right align labels, but scope to media queries so that\n // labels on narrow viewports stack the same as a default form example.\n @media (min-width: @screen-sm-min) {\n .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n }\n }\n\n // Validation states\n //\n // Reposition the icon because it's now within a grid column and columns have\n // `position: relative;` on them. Also accounts for the grid gutter padding.\n .has-feedback .form-control-feedback {\n right: floor((@grid-gutter-width / 2));\n }\n\n // Form group sizes\n //\n // Quick utility class for applying `.input-lg` and `.input-sm` styles to the\n // inputs and labels within a `.form-group`.\n .form-group-lg {\n @media (min-width: @screen-sm-min) {\n .control-label {\n padding-top: (@padding-large-vertical + 1);\n font-size: @font-size-large;\n }\n }\n }\n .form-group-sm {\n @media (min-width: @screen-sm-min) {\n .control-label {\n padding-top: (@padding-small-vertical + 1);\n font-size: @font-size-small;\n }\n }\n }\n}\n","// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n // Color the label and help text\n .help-block,\n .control-label,\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline,\n &.radio label,\n &.checkbox label,\n &.radio-inline label,\n &.checkbox-inline label {\n color: @text-color;\n }\n // Set the border and box shadow on specific inputs to match\n .form-control {\n border-color: @border-color;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n &:focus {\n border-color: darken(@border-color, 10%);\n @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\n .box-shadow(@shadow);\n }\n }\n // Set validation states also for addons\n .input-group-addon {\n color: @text-color;\n border-color: @border-color;\n background-color: @background-color;\n }\n // Optional feedback icon\n .form-control-feedback {\n color: @text-color;\n }\n}\n\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-border-focus` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n.form-control-focus(@color: @input-border-focus) {\n @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n &:focus {\n border-color: @color;\n outline: 0;\n .box-shadow(~\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\");\n }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. `<select>`\n// element gets special love because it's special, and that's a fact!\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n height: @input-height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n\n select& {\n height: @input-height;\n line-height: @input-height;\n }\n\n textarea&,\n select[multiple]& {\n height: auto;\n }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n display: inline-block;\n margin-bottom: 0; // For input.btn\n font-weight: @btn-font-weight;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n white-space: nowrap;\n .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @btn-border-radius-base);\n .user-select(none);\n\n &,\n &:active,\n &.active {\n &:focus,\n &.focus {\n .tab-focus();\n }\n }\n\n &:hover,\n &:focus,\n &.focus {\n color: @btn-default-color;\n text-decoration: none;\n }\n\n &:active,\n &.active {\n outline: 0;\n background-image: none;\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n .opacity(.65);\n .box-shadow(none);\n }\n\n a& {\n &.disabled,\n fieldset[disabled] & {\n pointer-events: none; // Future-proof disabling of clicks on `<a>` elements\n }\n }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n color: @link-color;\n font-weight: normal;\n border-radius: 0;\n\n &,\n &:active,\n &.active,\n &[disabled],\n fieldset[disabled] & {\n background-color: transparent;\n .box-shadow(none);\n }\n &,\n &:hover,\n &:focus,\n &:active {\n border-color: transparent;\n }\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n background-color: transparent;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @btn-link-disabled-color;\n text-decoration: none;\n }\n }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n // line-height: ensure even-numbered height of button next to large input\n .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @btn-border-radius-large);\n}\n.btn-sm {\n // line-height: ensure proper height of button next to small input\n .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n.btn-xs {\n .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:focus,\n &.focus {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 25%);\n }\n &:hover {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n\n &:hover,\n &:focus,\n &.focus {\n color: @color;\n background-color: darken(@background, 17%);\n border-color: darken(@border, 25%);\n }\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus,\n &.focus {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n","// Opacity\n\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.\n\n.fade {\n opacity: 0;\n .transition(opacity .15s linear);\n &.in {\n opacity: 1;\n }\n}\n\n.collapse {\n display: none;\n\n &.in { display: block; }\n tr&.in { display: table-row; }\n tbody&.in { display: table-row-group; }\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n .transition-property(~\"height, visibility\");\n .transition-duration(.35s);\n .transition-timing-function(ease);\n}\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: @caret-width-base dashed;\n border-top: @caret-width-base solid ~\"\\9\"; // IE8\n border-right: @caret-width-base solid transparent;\n border-left: @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropup,\n.dropdown {\n position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: @zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0; // override default ul\n list-style: none;\n font-size: @font-size-base;\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n background-color: @dropdown-bg;\n border: 1px solid @dropdown-fallback-border; // IE8 fallback\n border: 1px solid @dropdown-border;\n border-radius: @border-radius-base;\n .box-shadow(0 6px 12px rgba(0,0,0,.175));\n background-clip: padding-box;\n\n // Aligns the dropdown menu to right\n //\n // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n &.pull-right {\n right: 0;\n left: auto;\n }\n\n // Dividers (basically an hr) within the dropdown\n .divider {\n .nav-divider(@dropdown-divider-bg);\n }\n\n // Links within the dropdown menu\n > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: @line-height-base;\n color: @dropdown-link-color;\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n &:hover,\n &:focus {\n text-decoration: none;\n color: @dropdown-link-hover-color;\n background-color: @dropdown-link-hover-bg;\n }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-active-color;\n text-decoration: none;\n outline: 0;\n background-color: @dropdown-link-active-bg;\n }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-disabled-color;\n }\n\n // Nuke hover/focus effects\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none; // Remove CSS gradient\n .reset-filter();\n cursor: @cursor-disabled;\n }\n}\n\n// Open state for the dropdown\n.open {\n // Show the menu\n > .dropdown-menu {\n display: block;\n }\n\n // Remove the outline when :focus is triggered\n > a {\n outline: 0;\n }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n left: auto; // Reset the default from `.dropdown-menu`\n right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: @font-size-small;\n line-height: @line-height-base;\n color: @dropdown-header-color;\n white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n // Reverse the caret\n .caret {\n border-top: 0;\n border-bottom: @caret-width-base dashed;\n border-bottom: @caret-width-base solid ~\"\\9\"; // IE8\n content: \"\";\n }\n // Different positioning for bottom up menu\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-right {\n .dropdown-menu {\n .dropdown-menu-right();\n }\n // Necessary for overrides of the default right aligned menu.\n // Will remove come v4 in all likelihood.\n .dropdown-menu-left {\n .dropdown-menu-left();\n }\n }\n}\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; // match .btn alignment given font-size hack above\n > .btn {\n position: relative;\n float: left;\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active,\n &.active {\n z-index: 2;\n }\n }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n .btn + .btn,\n .btn + .btn-group,\n .btn-group + .btn,\n .btn-group + .btn-group {\n margin-left: -1px;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n margin-left: -5px; // Offset the first child's margin\n &:extend(.clearfix all);\n\n .btn,\n .btn-group,\n .input-group {\n float: left;\n }\n > .btn,\n > .btn-group,\n > .input-group {\n margin-left: 5px;\n }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n margin-left: 0;\n &:not(:last-child):not(.dropdown-toggle) {\n .border-right-radius(0);\n }\n}\n// Need .dropdown-toggle since :last-child doesn't apply, given that a .dropdown-menu is used immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-right-radius(0);\n }\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n .box-shadow(none);\n }\n}\n\n\n// Reposition the caret\n.btn .caret {\n margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n border-width: @caret-width-large @caret-width-large 0;\n border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n > .btn,\n > .btn-group,\n > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n }\n\n // Clear floats so dropdown menus can be properly placed\n > .btn-group {\n &:extend(.clearfix all);\n > .btn {\n float: none;\n }\n }\n\n > .btn + .btn,\n > .btn + .btn-group,\n > .btn-group + .btn,\n > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n }\n}\n\n.btn-group-vertical > .btn {\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n &:first-child:not(:last-child) {\n .border-top-radius(@btn-border-radius-base);\n .border-bottom-radius(0);\n }\n &:last-child:not(:first-child) {\n .border-top-radius(0);\n .border-bottom-radius(@btn-border-radius-base);\n }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-bottom-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-top-radius(0);\n}\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n > .btn,\n > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n }\n > .btn-group .btn {\n width: 100%;\n }\n\n > .btn-group .dropdown-menu {\n left: auto;\n }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `clip`. We cannot use\n// `display: none;` or `visibility: hidden;` as that also hides the popover.\n// Simply visually hiding the inputs via `opacity` would leave them clickable in\n// certain cases which is prevented by using `clip` and `pointer-events`.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 and\n// https://github.com/twbs/bootstrap/pull/14559 for more information.\n\n[data-toggle=\"buttons\"] {\n > .btn,\n > .btn-group > .btn {\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0,0,0,0);\n pointer-events: none;\n }\n }\n}\n","// Single side border-radius\n\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\n}\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n position: relative; // For dropdowns\n display: table;\n border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n // Undo padding and float of grid classes\n &[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n }\n\n .form-control {\n // Ensure that the input is always above the *appended* addon button for\n // proper border colors.\n position: relative;\n z-index: 2;\n\n // IE9 fubars the placeholder attribute in text inputs and the arrows on\n // select elements in input groups. To fix it, we float the input. Details:\n // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n float: left;\n\n width: 100%;\n margin-bottom: 0;\n\n &:focus {\n z-index: 3;\n }\n }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n .input-lg();\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n .input-sm();\n}\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 1;\n color: @input-color;\n text-align: center;\n background-color: @input-group-addon-bg;\n border: 1px solid @input-group-addon-border-color;\n border-radius: @input-border-radius;\n\n // Sizing\n &.input-sm {\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n border-radius: @input-border-radius-small;\n }\n &.input-lg {\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n border-radius: @input-border-radius-large;\n }\n\n // Nuke default margins from checkboxes and radios to vertically center within.\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n margin-top: 0;\n }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n .border-right-radius(0);\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n .border-left-radius(0);\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n position: relative;\n // Jankily prevent input button groups from wrapping with `white-space` and\n // `font-size` in combination with `inline-block` on buttons.\n font-size: 0;\n white-space: nowrap;\n\n // Negative margin for spacing, position for bringing hovered/focused/actived\n // element above the siblings.\n > .btn {\n position: relative;\n + .btn {\n margin-left: -1px;\n }\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active {\n z-index: 2;\n }\n }\n\n // Negative margin to only have a 1px border between the two\n &:first-child {\n > .btn,\n > .btn-group {\n margin-right: -1px;\n }\n }\n &:last-child {\n > .btn,\n > .btn-group {\n z-index: 2;\n margin-left: -1px;\n }\n }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n margin-bottom: 0;\n padding-left: 0; // Override default ul/ol\n list-style: none;\n &:extend(.clearfix all);\n\n > li {\n position: relative;\n display: block;\n\n > a {\n position: relative;\n display: block;\n padding: @nav-link-padding;\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: @nav-link-hover-bg;\n }\n }\n\n // Disabled state sets text to gray and nukes hover/tab effects\n &.disabled > a {\n color: @nav-disabled-link-color;\n\n &:hover,\n &:focus {\n color: @nav-disabled-link-hover-color;\n text-decoration: none;\n background-color: transparent;\n cursor: @cursor-disabled;\n }\n }\n }\n\n // Open dropdowns\n .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @nav-link-hover-bg;\n border-color: @link-color;\n }\n }\n\n // Nav dividers (deprecated with v3.0.1)\n //\n // This should have been removed in v3 with the dropping of `.nav-list`, but\n // we missed it. We don't currently support this anywhere, but in the interest\n // of maintaining backward compatibility in case you use it, it's deprecated.\n .nav-divider {\n .nav-divider();\n }\n\n // Prevent IE8 from misplacing imgs\n //\n // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n > li > a > img {\n max-width: none;\n }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n border-bottom: 1px solid @nav-tabs-border-color;\n > li {\n float: left;\n // Make the list-items overlay the bottom border\n margin-bottom: -1px;\n\n // Actual tabs (as links)\n > a {\n margin-right: 2px;\n line-height: @line-height-base;\n border: 1px solid transparent;\n border-radius: @border-radius-base @border-radius-base 0 0;\n &:hover {\n border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n }\n }\n\n // Active state, and its :hover to override normal :hover\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-tabs-active-link-hover-color;\n background-color: @nav-tabs-active-link-hover-bg;\n border: 1px solid @nav-tabs-active-link-hover-border-color;\n border-bottom-color: transparent;\n cursor: default;\n }\n }\n }\n // pulling this in mainly for less shorthand\n &.nav-justified {\n .nav-justified();\n .nav-tabs-justified();\n }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n > li {\n float: left;\n\n // Links rendered as pills\n > a {\n border-radius: @nav-pills-border-radius;\n }\n + li {\n margin-left: 2px;\n }\n\n // Active state\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-pills-active-link-hover-color;\n background-color: @nav-pills-active-link-hover-bg;\n }\n }\n }\n}\n\n\n// Stacked pills\n.nav-stacked {\n > li {\n float: none;\n + li {\n margin-top: 2px;\n margin-left: 0; // no need for this gap between nav items\n }\n }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n width: 100%;\n\n > li {\n float: none;\n > a {\n text-align: center;\n margin-bottom: 5px;\n }\n }\n\n > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n }\n\n @media (min-width: @screen-sm-min) {\n > li {\n display: table-cell;\n width: 1%;\n > a {\n margin-bottom: 0;\n }\n }\n }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n border-bottom: 0;\n\n > li > a {\n // Override margin from .nav-tabs\n margin-right: 0;\n border-radius: @border-radius-base;\n }\n\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border: 1px solid @nav-tabs-justified-link-border-color;\n }\n\n @media (min-width: @screen-sm-min) {\n > li > a {\n border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n border-radius: @border-radius-base @border-radius-base 0 0;\n }\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border-bottom-color: @nav-tabs-justified-active-link-border-color;\n }\n }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n // make dropdown border overlap tab border\n margin-top: -1px;\n // Remove the top rounded corners here since there is a hard edge above the menu\n .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n position: relative;\n min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n margin-bottom: @navbar-margin-bottom;\n border: 1px solid transparent;\n\n // Prevent floats from breaking the navbar\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: @navbar-border-radius;\n }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n overflow-x: visible;\n padding-right: @navbar-padding-horizontal;\n padding-left: @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n &:extend(.clearfix all);\n -webkit-overflow-scrolling: touch;\n\n &.in {\n overflow-y: auto;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border-top: 0;\n box-shadow: none;\n\n &.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0; // Override default setting\n overflow: visible !important;\n }\n\n &.in {\n overflow-y: visible;\n }\n\n // Undo the collapse side padding for navbars with containers to ensure\n // alignment of right-aligned contents.\n .navbar-fixed-top &,\n .navbar-static-top &,\n .navbar-fixed-bottom & {\n padding-left: 0;\n padding-right: 0;\n }\n }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n .navbar-collapse {\n max-height: @navbar-collapse-max-height;\n\n @media (max-device-width: @screen-xs-min) and (orientation: landscape) {\n max-height: 200px;\n }\n }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n > .navbar-header,\n > .navbar-collapse {\n margin-right: -@navbar-padding-horizontal;\n margin-left: -@navbar-padding-horizontal;\n\n @media (min-width: @grid-float-breakpoint) {\n margin-right: 0;\n margin-left: 0;\n }\n }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n z-index: @zindex-navbar;\n border-width: 0 0 1px;\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: @zindex-navbar-fixed;\n\n // Undo the rounded corners\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0; // override .navbar defaults\n border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n float: left;\n padding: @navbar-padding-vertical @navbar-padding-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-computed;\n height: @navbar-height;\n\n &:hover,\n &:focus {\n text-decoration: none;\n }\n\n > img {\n display: block;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n .navbar > .container &,\n .navbar > .container-fluid & {\n margin-left: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: @navbar-padding-horizontal;\n padding: 9px 10px;\n .navbar-vertical-align(34px);\n background-color: transparent;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n border-radius: @border-radius-base;\n\n // We remove the `outline` here, but later compensate by attaching `:hover`\n // styles to `:focus`.\n &:focus {\n outline: 0;\n }\n\n // Bars\n .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n }\n .icon-bar + .icon-bar {\n margin-top: 4px;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n display: none;\n }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: @line-height-computed;\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n > li > a,\n .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n > li > a {\n line-height: @line-height-computed;\n &:hover,\n &:focus {\n background-image: none;\n }\n }\n }\n }\n\n // Uncollapse the nav\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin: 0;\n\n > li {\n float: left;\n > a {\n padding-top: @navbar-padding-vertical;\n padding-bottom: @navbar-padding-vertical;\n }\n }\n }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n margin-left: -@navbar-padding-horizontal;\n margin-right: -@navbar-padding-horizontal;\n padding: 10px @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n\n // Mixin behavior for optimum display\n .form-inline();\n\n .form-group {\n @media (max-width: @grid-float-breakpoint-max) {\n margin-bottom: 5px;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n }\n\n // Vertically center in expanded, horizontal navbar\n .navbar-vertical-align(@input-height-base);\n\n // Undo 100% width for pull classes\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n .box-shadow(none);\n }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n .border-top-radius(@navbar-border-radius);\n .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n .navbar-vertical-align(@input-height-base);\n\n &.btn-sm {\n .navbar-vertical-align(@input-height-small);\n }\n &.btn-xs {\n .navbar-vertical-align(22);\n }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n .navbar-vertical-align(@line-height-computed);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin-left: @navbar-padding-horizontal;\n margin-right: @navbar-padding-horizontal;\n }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n//\n// Declared after the navbar components to ensure more specificity on the margins.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-left { .pull-left(); }\n .navbar-right {\n .pull-right();\n margin-right: -@navbar-padding-horizontal;\n\n ~ .navbar-right {\n margin-right: 0;\n }\n }\n}\n\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n background-color: @navbar-default-bg;\n border-color: @navbar-default-border;\n\n .navbar-brand {\n color: @navbar-default-brand-color;\n &:hover,\n &:focus {\n color: @navbar-default-brand-hover-color;\n background-color: @navbar-default-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-default-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-default-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n\n .navbar-toggle {\n border-color: @navbar-default-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-default-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-default-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: @navbar-default-border;\n }\n\n // Dropdown menu items\n .navbar-nav {\n // Remove background color from open dropdown\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-default-link-active-bg;\n color: @navbar-default-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n > li > a {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n }\n }\n\n\n // Links in navbars\n //\n // Add a class to ensure links outside the navbar nav are colored correctly.\n\n .navbar-link {\n color: @navbar-default-link-color;\n &:hover {\n color: @navbar-default-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n }\n }\n }\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n background-color: @navbar-inverse-bg;\n border-color: @navbar-inverse-border;\n\n .navbar-brand {\n color: @navbar-inverse-brand-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-brand-hover-color;\n background-color: @navbar-inverse-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-inverse-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-inverse-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n\n // Darken the responsive nav toggle\n .navbar-toggle {\n border-color: @navbar-inverse-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-inverse-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-inverse-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: darken(@navbar-inverse-bg, 7%);\n }\n\n // Dropdowns\n .navbar-nav {\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-inverse-link-active-bg;\n color: @navbar-inverse-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display\n .open .dropdown-menu {\n > .dropdown-header {\n border-color: @navbar-inverse-border;\n }\n .divider {\n background-color: @navbar-inverse-border;\n }\n > li > a {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n }\n }\n\n .navbar-link {\n color: @navbar-inverse-link-color;\n &:hover {\n color: @navbar-inverse-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n }\n }\n }\n}\n","// Navbar vertical align\n//\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n .clearfix();\n}\n.center-block {\n .center-block();\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n display: none !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n position: fixed;\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n margin-bottom: @line-height-computed;\n list-style: none;\n background-color: @breadcrumb-bg;\n border-radius: @border-radius-base;\n\n > li {\n display: inline-block;\n\n + li:before {\n content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n padding: 0 5px;\n color: @breadcrumb-color;\n }\n }\n\n > .active {\n color: @breadcrumb-active-color;\n }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: @line-height-computed 0;\n border-radius: @border-radius-base;\n\n > li {\n display: inline; // Remove list-style and block-level defaults\n > a,\n > span {\n position: relative;\n float: left; // Collapse white-space\n padding: @padding-base-vertical @padding-base-horizontal;\n line-height: @line-height-base;\n text-decoration: none;\n color: @pagination-color;\n background-color: @pagination-bg;\n border: 1px solid @pagination-border;\n margin-left: -1px;\n }\n &:first-child {\n > a,\n > span {\n margin-left: 0;\n .border-left-radius(@border-radius-base);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius-base);\n }\n }\n }\n\n > li > a,\n > li > span {\n &:hover,\n &:focus {\n z-index: 2;\n color: @pagination-hover-color;\n background-color: @pagination-hover-bg;\n border-color: @pagination-hover-border;\n }\n }\n\n > .active > a,\n > .active > span {\n &,\n &:hover,\n &:focus {\n z-index: 3;\n color: @pagination-active-color;\n background-color: @pagination-active-bg;\n border-color: @pagination-active-border;\n cursor: default;\n }\n }\n\n > .disabled {\n > span,\n > span:hover,\n > span:focus,\n > a,\n > a:hover,\n > a:focus {\n color: @pagination-disabled-color;\n background-color: @pagination-disabled-bg;\n border-color: @pagination-disabled-border;\n cursor: @cursor-disabled;\n }\n }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n","// Pagination\n\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n padding-left: 0;\n margin: @line-height-computed 0;\n list-style: none;\n text-align: center;\n &:extend(.clearfix all);\n li {\n display: inline;\n > a,\n > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: @pager-bg;\n border: 1px solid @pager-border;\n border-radius: @pager-border-radius;\n }\n\n > a:hover,\n > a:focus {\n text-decoration: none;\n background-color: @pager-hover-bg;\n }\n }\n\n .next {\n > a,\n > span {\n float: right;\n }\n }\n\n .previous {\n > a,\n > span {\n float: left;\n }\n }\n\n .disabled {\n > a,\n > a:hover,\n > a:focus,\n > span {\n color: @pager-disabled-color;\n background-color: @pager-bg;\n cursor: @cursor-disabled;\n }\n }\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: @label-color;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n\n // Add hover effects, but only for links\n a& {\n &:hover,\n &:focus {\n color: @label-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Empty labels collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for labels in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n .label-variant(@label-default-bg);\n}\n\n.label-primary {\n .label-variant(@label-primary-bg);\n}\n\n.label-success {\n .label-variant(@label-success-bg);\n}\n\n.label-info {\n .label-variant(@label-info-bg);\n}\n\n.label-warning {\n .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n .label-variant(@label-danger-bg);\n}\n","// Labels\n\n.label-variant(@color) {\n background-color: @color;\n\n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: @font-size-small;\n font-weight: @badge-font-weight;\n color: @badge-color;\n line-height: @badge-line-height;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: @badge-bg;\n border-radius: @badge-border-radius;\n\n // Empty badges collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for badges in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n\n .btn-xs &,\n .btn-group-xs > .btn & {\n top: 0;\n padding: 1px 5px;\n }\n\n // Hover state, but only for links\n a& {\n &:hover,\n &:focus {\n color: @badge-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Account for badges in navs\n .list-group-item.active > &,\n .nav-pills > .active > a > & {\n color: @badge-active-color;\n background-color: @badge-active-bg;\n }\n\n .list-group-item > & {\n float: right;\n }\n\n .list-group-item > & + & {\n margin-right: 5px;\n }\n\n .nav-pills > li > a > & {\n margin-left: 3px;\n }\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n padding-top: @jumbotron-padding;\n padding-bottom: @jumbotron-padding;\n margin-bottom: @jumbotron-padding;\n color: @jumbotron-color;\n background-color: @jumbotron-bg;\n\n h1,\n .h1 {\n color: @jumbotron-heading-color;\n }\n\n p {\n margin-bottom: (@jumbotron-padding / 2);\n font-size: @jumbotron-font-size;\n font-weight: 200;\n }\n\n > hr {\n border-top-color: darken(@jumbotron-bg, 10%);\n }\n\n .container &,\n .container-fluid & {\n border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n\n .container {\n max-width: 100%;\n }\n\n @media screen and (min-width: @screen-sm-min) {\n padding-top: (@jumbotron-padding * 1.6);\n padding-bottom: (@jumbotron-padding * 1.6);\n\n .container &,\n .container-fluid & {\n padding-left: (@jumbotron-padding * 2);\n padding-right: (@jumbotron-padding * 2);\n }\n\n h1,\n .h1 {\n font-size: @jumbotron-heading-font-size;\n }\n }\n}\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n display: block;\n padding: @thumbnail-padding;\n margin-bottom: @line-height-computed;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(border .2s ease-in-out);\n\n > img,\n a > img {\n &:extend(.img-responsive);\n margin-left: auto;\n margin-right: auto;\n }\n\n // Add a hover state for linked versions only\n a&:hover,\n a&:focus,\n a&.active {\n border-color: @link-color;\n }\n\n // Image captions\n .caption {\n padding: @thumbnail-caption-padding;\n color: @thumbnail-caption-color;\n }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n padding: @alert-padding;\n margin-bottom: @line-height-computed;\n border: 1px solid transparent;\n border-radius: @alert-border-radius;\n\n // Headings for larger alerts\n h4 {\n margin-top: 0;\n // Specified for the h4 to prevent conflicts of changing @headings-color\n color: inherit;\n }\n\n // Provide class for links that match alerts\n .alert-link {\n font-weight: @alert-link-font-weight;\n }\n\n // Improve alignment and spacing of inner content\n > p,\n > ul {\n margin-bottom: 0;\n }\n\n > p + p {\n margin-top: 5px;\n }\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.\n.alert-dismissible {\n padding-right: (@alert-padding + 20);\n\n // Adjust close link position\n .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n\n.alert-info {\n .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n\n.alert-warning {\n .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n\n.alert-danger {\n .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","// Alerts\n\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\n }\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n overflow: hidden;\n height: @line-height-computed;\n margin-bottom: @line-height-computed;\n background-color: @progress-bg;\n border-radius: @progress-border-radius;\n .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: @font-size-small;\n line-height: @line-height-computed;\n color: @progress-bar-color;\n text-align: center;\n background-color: @progress-bar-bg;\n .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n .transition(width .6s ease);\n}\n\n// Striped bars\n//\n// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar-striped` class, which you just add to an existing\n// `.progress-bar`.\n.progress-striped .progress-bar,\n.progress-bar-striped {\n #gradient > .striped();\n background-size: 40px 40px;\n}\n\n// Call animation for the active one\n//\n// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar.active` approach.\n.progress.active .progress-bar,\n.progress-bar.active {\n .animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Progress bars\n\n.progress-bar-variant(@color) {\n background-color: @color;\n\n // Deprecated parent class requirement as of v3.2.0\n .progress-striped & {\n #gradient > .striped();\n }\n}\n",".media {\n // Proper spacing between instances of .media\n margin-top: 15px;\n\n &:first-child {\n margin-top: 0;\n }\n}\n\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n\n.media-body {\n width: 10000px;\n}\n\n.media-object {\n display: block;\n\n // Fix collapse in webkit from max-width: 100% and display: table-cell.\n &.img-thumbnail {\n max-width: none;\n }\n}\n\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n\n.media-middle {\n vertical-align: middle;\n}\n\n.media-bottom {\n vertical-align: bottom;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n\n// Media list variation\n//\n// Undo default ul/ol styles\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n // No need to set list-style: none; since .list-group-item is block level\n margin-bottom: 20px;\n padding-left: 0; // reset padding because ul and ol\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n // Place the border on the list items and negative margin up for better styling\n margin-bottom: -1px;\n background-color: @list-group-bg;\n border: 1px solid @list-group-border;\n\n // Round the first and last items\n &:first-child {\n .border-top-radius(@list-group-border-radius);\n }\n &:last-child {\n margin-bottom: 0;\n .border-bottom-radius(@list-group-border-radius);\n }\n}\n\n\n// Interactive list items\n//\n// Use anchor or button elements instead of `li`s or `div`s to create interactive items.\n// Includes an extra `.active` modifier class for showing selected items.\n\na.list-group-item,\nbutton.list-group-item {\n color: @list-group-link-color;\n\n .list-group-item-heading {\n color: @list-group-link-heading-color;\n }\n\n // Hover state\n &:hover,\n &:focus {\n text-decoration: none;\n color: @list-group-link-hover-color;\n background-color: @list-group-hover-bg;\n }\n}\n\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n\n.list-group-item {\n // Disabled state\n &.disabled,\n &.disabled:hover,\n &.disabled:focus {\n background-color: @list-group-disabled-bg;\n color: @list-group-disabled-color;\n cursor: @cursor-disabled;\n\n // Force color to inherit for custom content\n .list-group-item-heading {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-disabled-text-color;\n }\n }\n\n // Active class on item itself, not parent\n &.active,\n &.active:hover,\n &.active:focus {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: @list-group-active-color;\n background-color: @list-group-active-bg;\n border-color: @list-group-active-border;\n\n // Force color to inherit for custom content\n .list-group-item-heading,\n .list-group-item-heading > small,\n .list-group-item-heading > .small {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-active-text-color;\n }\n }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n.list-group-item-variant(success; @state-success-bg; @state-success-text);\n.list-group-item-variant(info; @state-info-bg; @state-info-text);\n.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);\n.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\n\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n","// List Groups\n\n.list-group-item-variant(@state; @background; @color) {\n .list-group-item-@{state} {\n color: @color;\n background-color: @background;\n\n a&,\n button& {\n color: @color;\n\n .list-group-item-heading {\n color: inherit;\n }\n\n &:hover,\n &:focus {\n color: @color;\n background-color: darken(@background, 5%);\n }\n &.active,\n &.active:hover,\n &.active:focus {\n color: #fff;\n background-color: @color;\n border-color: @color;\n }\n }\n }\n}\n","//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n margin-bottom: @line-height-computed;\n background-color: @panel-bg;\n border: 1px solid transparent;\n border-radius: @panel-border-radius;\n .box-shadow(0 1px 1px rgba(0,0,0,.05));\n}\n\n// Panel contents\n.panel-body {\n padding: @panel-body-padding;\n &:extend(.clearfix all);\n}\n\n// Optional heading\n.panel-heading {\n padding: @panel-heading-padding;\n border-bottom: 1px solid transparent;\n .border-top-radius((@panel-border-radius - 1));\n\n > .dropdown .dropdown-toggle {\n color: inherit;\n }\n}\n\n// Within heading, strip any `h*` tag of its default margins for spacing.\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: ceil((@font-size-base * 1.125));\n color: inherit;\n\n > a,\n > small,\n > .small,\n > small > a,\n > .small > a {\n color: inherit;\n }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n padding: @panel-footer-padding;\n background-color: @panel-footer-bg;\n border-top: 1px solid @panel-inner-border;\n .border-bottom-radius((@panel-border-radius - 1));\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n > .list-group,\n > .panel-collapse > .list-group {\n margin-bottom: 0;\n\n .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n }\n\n // Add border top radius for first one\n &:first-child {\n .list-group-item:first-child {\n border-top: 0;\n .border-top-radius((@panel-border-radius - 1));\n }\n }\n\n // Add border bottom radius for last one\n &:last-child {\n .list-group-item:last-child {\n border-bottom: 0;\n .border-bottom-radius((@panel-border-radius - 1));\n }\n }\n }\n > .panel-heading + .panel-collapse > .list-group {\n .list-group-item:first-child {\n .border-top-radius(0);\n }\n }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n .list-group-item:first-child {\n border-top-width: 0;\n }\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n > .table,\n > .table-responsive > .table,\n > .panel-collapse > .table {\n margin-bottom: 0;\n\n caption {\n padding-left: @panel-body-padding;\n padding-right: @panel-body-padding;\n }\n }\n // Add border top radius for first one\n > .table:first-child,\n > .table-responsive:first-child > .table:first-child {\n .border-top-radius((@panel-border-radius - 1));\n\n > thead:first-child,\n > tbody:first-child {\n > tr:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n border-top-right-radius: (@panel-border-radius - 1);\n\n td:first-child,\n th:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-top-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n // Add border bottom radius for last one\n > .table:last-child,\n > .table-responsive:last-child > .table:last-child {\n .border-bottom-radius((@panel-border-radius - 1));\n\n > tbody:last-child,\n > tfoot:last-child {\n > tr:last-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n border-bottom-right-radius: (@panel-border-radius - 1);\n\n td:first-child,\n th:first-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-bottom-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n > .panel-body + .table,\n > .panel-body + .table-responsive,\n > .table + .panel-body,\n > .table-responsive + .panel-body {\n border-top: 1px solid @table-border-color;\n }\n > .table > tbody:first-child > tr:first-child th,\n > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n }\n > .table-bordered,\n > .table-responsive > .table-bordered {\n border: 0;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n > thead,\n > tbody {\n > tr:first-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n > tbody,\n > tfoot {\n > tr:last-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n }\n > .table-responsive {\n border: 0;\n margin-bottom: 0;\n }\n}\n\n\n// Collapsible panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n margin-bottom: @line-height-computed;\n\n // Tighten up margin so it's only between panels\n .panel {\n margin-bottom: 0;\n border-radius: @panel-border-radius;\n\n + .panel {\n margin-top: 5px;\n }\n }\n\n .panel-heading {\n border-bottom: 0;\n\n + .panel-collapse > .panel-body,\n + .panel-collapse > .list-group {\n border-top: 1px solid @panel-inner-border;\n }\n }\n\n .panel-footer {\n border-top: 0;\n + .panel-collapse .panel-body {\n border-bottom: 1px solid @panel-inner-border;\n }\n }\n}\n\n\n// Contextual variations\n.panel-default {\n .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);\n}\n.panel-primary {\n .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);\n}\n.panel-success {\n .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);\n}\n.panel-info {\n .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);\n}\n.panel-warning {\n .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);\n}\n.panel-danger {\n .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);\n}\n","// Panels\n\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n border-color: @border;\n\n & > .panel-heading {\n color: @heading-text-color;\n background-color: @heading-bg-color;\n border-color: @heading-border;\n\n + .panel-collapse > .panel-body {\n border-top-color: @border;\n }\n .badge {\n color: @heading-bg-color;\n background-color: @heading-text-color;\n }\n }\n & > .panel-footer {\n + .panel-collapse > .panel-body {\n border-bottom-color: @border;\n }\n }\n}\n","// Embeds responsive\n//\n// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n\n .embed-responsive-item,\n iframe,\n embed,\n object,\n video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n }\n}\n\n// Modifier class for 16:9 aspect ratio\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n\n// Modifier class for 4:3 aspect ratio\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n","//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: @well-bg;\n border: 1px solid @well-border;\n border-radius: @border-radius-base;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));\n blockquote {\n border-color: #ddd;\n border-color: rgba(0,0,0,.15);\n }\n}\n\n// Sizes\n.well-lg {\n padding: 24px;\n border-radius: @border-radius-large;\n}\n.well-sm {\n padding: 9px;\n border-radius: @border-radius-small;\n}\n","//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n float: right;\n font-size: (@font-size-base * 1.5);\n font-weight: @close-font-weight;\n line-height: 1;\n color: @close-color;\n text-shadow: @close-text-shadow;\n .opacity(.2);\n\n &:hover,\n &:focus {\n color: @close-color;\n text-decoration: none;\n cursor: pointer;\n .opacity(.5);\n }\n\n // Additional properties for button version\n // iOS requires the button element instead of an anchor tag.\n // If you want the anchor version, it requires `href=\"#\"`.\n // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n button& {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n }\n}\n","//\n// Modals\n// --------------------------------------------------\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal;\n -webkit-overflow-scrolling: touch;\n\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n\n // When fading in the modal, animate it to slide down\n &.fade .modal-dialog {\n .translate(0, -25%);\n .transition-transform(~\"0.3s ease-out\");\n }\n &.in .modal-dialog { .translate(0, 0) }\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n background-color: @modal-content-bg;\n border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n border: 1px solid @modal-content-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 3px 9px rgba(0,0,0,.5));\n background-clip: padding-box;\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal-background;\n background-color: @modal-backdrop-bg;\n // Fade for backdrop\n &.fade { .opacity(0); }\n &.in { .opacity(@modal-backdrop-opacity); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n padding: @modal-title-padding;\n border-bottom: 1px solid @modal-header-border-color;\n &:extend(.clearfix all);\n}\n// Close icon\n.modal-header .close {\n margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n margin: 0;\n line-height: @modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n padding: @modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n padding: @modal-inner-padding;\n text-align: right; // right align buttons\n border-top: 1px solid @modal-footer-border-color;\n &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons\n\n // Properly space out buttons\n .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n }\n // but override that for button groups\n .btn-group .btn + .btn {\n margin-left: -1px;\n }\n // and override it for block buttons as well\n .btn-block + .btn-block {\n margin-left: 0;\n }\n}\n\n// Measure scrollbar width for padding body during modal show/hide\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n// Scale up the modal\n@media (min-width: @screen-sm-min) {\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n width: @modal-md;\n margin: 30px auto;\n }\n .modal-content {\n .box-shadow(0 5px 15px rgba(0,0,0,.5));\n }\n\n // Modal sizes\n .modal-sm { width: @modal-sm; }\n}\n\n@media (min-width: @screen-md-min) {\n .modal-lg { width: @modal-lg; }\n}\n","//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n position: absolute;\n z-index: @zindex-tooltip;\n display: block;\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n .reset-text();\n font-size: @font-size-small;\n\n .opacity(0);\n\n &.in { .opacity(@tooltip-opacity); }\n &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; }\n &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; }\n &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; }\n &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: @tooltip-max-width;\n padding: 3px 8px;\n color: @tooltip-color;\n text-align: center;\n background-color: @tooltip-bg;\n border-radius: @border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n// Note: Deprecated .top-left, .top-right, .bottom-left, and .bottom-right as of v3.3.1\n.tooltip {\n &.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-left .tooltip-arrow {\n bottom: 0;\n right: @tooltip-arrow-width;\n margin-bottom: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-right .tooltip-arrow {\n bottom: 0;\n left: @tooltip-arrow-width;\n margin-bottom: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;\n border-right-color: @tooltip-arrow-color;\n }\n &.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-left-color: @tooltip-arrow-color;\n }\n &.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-left .tooltip-arrow {\n top: 0;\n right: @tooltip-arrow-width;\n margin-top: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-right .tooltip-arrow {\n top: 0;\n left: @tooltip-arrow-width;\n margin-top: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n}\n",".reset-text() {\n font-family: @font-family-base;\n // We deliberately do NOT reset font-size.\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: @line-height-base;\n text-align: left; // Fallback for where `start` is not supported\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n}\n","//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: @zindex-popover;\n display: none;\n max-width: @popover-max-width;\n padding: 1px;\n // Our parent element can be arbitrary since popovers are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n .reset-text();\n font-size: @font-size-base;\n\n background-color: @popover-bg;\n background-clip: padding-box;\n border: 1px solid @popover-fallback-border-color;\n border: 1px solid @popover-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 5px 10px rgba(0,0,0,.2));\n\n // Offset the popover to account for the popover arrow\n &.top { margin-top: -@popover-arrow-width; }\n &.right { margin-left: @popover-arrow-width; }\n &.bottom { margin-top: @popover-arrow-width; }\n &.left { margin-left: -@popover-arrow-width; }\n}\n\n.popover-title {\n margin: 0; // reset heading margin\n padding: 8px 14px;\n font-size: @font-size-base;\n background-color: @popover-title-bg;\n border-bottom: 1px solid darken(@popover-title-bg, 5%);\n border-radius: (@border-radius-large - 1) (@border-radius-large - 1) 0 0;\n}\n\n.popover-content {\n padding: 9px 14px;\n}\n\n// Arrows\n//\n// .arrow is outer, .arrow:after is inner\n\n.popover > .arrow {\n &,\n &:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n }\n}\n.popover > .arrow {\n border-width: @popover-arrow-outer-width;\n}\n.popover > .arrow:after {\n border-width: @popover-arrow-width;\n content: \"\";\n}\n\n.popover {\n &.top > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-top-color: @popover-arrow-outer-color;\n bottom: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n bottom: 1px;\n margin-left: -@popover-arrow-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-color;\n }\n }\n &.right > .arrow {\n top: 50%;\n left: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-right-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n left: 1px;\n bottom: -@popover-arrow-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-color;\n }\n }\n &.bottom > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-bottom-color: @popover-arrow-outer-color;\n top: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n top: 1px;\n margin-left: -@popover-arrow-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-color;\n }\n }\n\n &.left > .arrow {\n top: 50%;\n right: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-right-width: 0;\n border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-left-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: @popover-arrow-color;\n bottom: -@popover-arrow-width;\n }\n }\n}\n","//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n position: relative;\n}\n\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n\n > .item {\n display: none;\n position: relative;\n .transition(.6s ease-in-out left);\n\n // Account for jankitude on images\n > img,\n > a > img {\n &:extend(.img-responsive);\n line-height: 1;\n }\n\n // WebKit CSS3 transforms for supported devices\n @media all and (transform-3d), (-webkit-transform-3d) {\n .transition-transform(~'0.6s ease-in-out');\n .backface-visibility(~'hidden');\n .perspective(1000px);\n\n &.next,\n &.active.right {\n .translate3d(100%, 0, 0);\n left: 0;\n }\n &.prev,\n &.active.left {\n .translate3d(-100%, 0, 0);\n left: 0;\n }\n &.next.left,\n &.prev.right,\n &.active {\n .translate3d(0, 0, 0);\n left: 0;\n }\n }\n }\n\n > .active,\n > .next,\n > .prev {\n display: block;\n }\n\n > .active {\n left: 0;\n }\n\n > .next,\n > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n }\n\n > .next {\n left: 100%;\n }\n > .prev {\n left: -100%;\n }\n > .next.left,\n > .prev.right {\n left: 0;\n }\n\n > .active.left {\n left: -100%;\n }\n > .active.right {\n left: 100%;\n }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: @carousel-control-width;\n .opacity(@carousel-control-opacity);\n font-size: @carousel-control-font-size;\n color: @carousel-control-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n background-color: rgba(0, 0, 0, 0); // Fix IE9 click-thru bug\n // We can't have this transition here because WebKit cancels the carousel\n // animation if you trip this while in the middle of another animation.\n\n // Set gradients for backgrounds\n &.left {\n #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));\n }\n &.right {\n left: auto;\n right: 0;\n #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));\n }\n\n // Hover/focus state\n &:hover,\n &:focus {\n outline: 0;\n color: @carousel-control-color;\n text-decoration: none;\n .opacity(.9);\n }\n\n // Toggles\n .icon-prev,\n .icon-next,\n .glyphicon-chevron-left,\n .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n margin-top: -10px;\n z-index: 5;\n display: inline-block;\n }\n .icon-prev,\n .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n }\n .icon-next,\n .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n }\n .icon-prev,\n .icon-next {\n width: 20px;\n height: 20px;\n line-height: 1;\n font-family: serif;\n }\n\n\n .icon-prev {\n &:before {\n content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n }\n }\n .icon-next {\n &:before {\n content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n }\n }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n\n li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid @carousel-indicator-border-color;\n border-radius: 10px;\n cursor: pointer;\n\n // IE8-9 hack for event handling\n //\n // Internet Explorer 8-9 does not support clicks on elements without a set\n // `background-color`. We cannot use `filter` since that's not viewed as a\n // background color by the browser. Thus, a hack is needed.\n // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Internet_Explorer\n //\n // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n // set alpha transparency for the best results possible.\n background-color: #000 \\9; // IE8\n background-color: rgba(0,0,0,0); // IE9\n }\n .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: @carousel-indicator-active-bg;\n }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: @carousel-caption-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n & .btn {\n text-shadow: none; // No shadow for button elements in carousel-caption\n }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n\n // Scale up the controls a smidge\n .carousel-control {\n .glyphicon-chevron-left,\n .glyphicon-chevron-right,\n .icon-prev,\n .icon-next {\n width: (@carousel-control-font-size * 1.5);\n height: (@carousel-control-font-size * 1.5);\n margin-top: (@carousel-control-font-size / -2);\n font-size: (@carousel-control-font-size * 1.5);\n }\n .glyphicon-chevron-left,\n .icon-prev {\n margin-left: (@carousel-control-font-size / -2);\n }\n .glyphicon-chevron-right,\n .icon-next {\n margin-right: (@carousel-control-font-size / -2);\n }\n }\n\n // Show and left align the captions\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n\n // Move up the indicators\n .carousel-indicators {\n bottom: 20px;\n }\n}\n","// Clearfix\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n// contenteditable attribute is included anywhere else in the document.\n// Otherwise it causes space to appear at the top and bottom of elements\n// that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n// `:before` to contain the top-margins of child elements.\n//\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n\n.clearfix() {\n &:before,\n &:after {\n content: \" \"; // 1\n display: table; // 2\n }\n &:after {\n clear: both;\n }\n}\n","// Center-align a block level element\n\n.center-block() {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n","// CSS image replacement\n//\n// Heads up! v3 launched with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (has been removed in v4)\n.hide-text() {\n font: ~\"0/0\" a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n// New mixin to use as of v3.0.1\n.text-hide() {\n .hide-text();\n}\n","//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: http://getbootstrap.com/getting-started/#support-ie10-width\n// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@-ms-viewport {\n width: device-width;\n}\n\n\n// Visibility utilities\n// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n .responsive-invisibility();\n}\n\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n\n.visible-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-visibility();\n }\n}\n.visible-xs-block {\n @media (max-width: @screen-xs-max) {\n display: block !important;\n }\n}\n.visible-xs-inline {\n @media (max-width: @screen-xs-max) {\n display: inline !important;\n }\n}\n.visible-xs-inline-block {\n @media (max-width: @screen-xs-max) {\n display: inline-block !important;\n }\n}\n\n.visible-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-visibility();\n }\n}\n.visible-sm-block {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: block !important;\n }\n}\n.visible-sm-inline {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: inline !important;\n }\n}\n.visible-sm-inline-block {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: inline-block !important;\n }\n}\n\n.visible-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-visibility();\n }\n}\n.visible-md-block {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: block !important;\n }\n}\n.visible-md-inline {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: inline !important;\n }\n}\n.visible-md-inline-block {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: inline-block !important;\n }\n}\n\n.visible-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-visibility();\n }\n}\n.visible-lg-block {\n @media (min-width: @screen-lg-min) {\n display: block !important;\n }\n}\n.visible-lg-inline {\n @media (min-width: @screen-lg-min) {\n display: inline !important;\n }\n}\n.visible-lg-inline-block {\n @media (min-width: @screen-lg-min) {\n display: inline-block !important;\n }\n}\n\n.hidden-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-invisibility();\n }\n}\n.hidden-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-invisibility();\n }\n}\n.hidden-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-invisibility();\n }\n}\n.hidden-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-invisibility();\n }\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n// Note: Deprecated .visible-print as of v3.2.0\n.visible-print {\n .responsive-invisibility();\n\n @media print {\n .responsive-visibility();\n }\n}\n.visible-print-block {\n display: none !important;\n\n @media print {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n\n @media print {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n\n @media print {\n display: inline-block !important;\n }\n}\n\n.hidden-print {\n @media print {\n .responsive-invisibility();\n }\n}\n","// Responsive utilities\n\n//\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n display: block !important;\n table& { display: table !important; }\n tr& { display: table-row !important; }\n th&,\n td& { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n display: none !important;\n}\n"]}
\ No newline at end of file
diff --git a/GitCandy.Web/Content/bootstrap.min.css b/GitCandy.Web/Content/bootstrap.min.css
new file mode 100644
index 0000000..ed3905e
--- /dev/null
+++ b/GitCandy.Web/Content/bootstrap.min.css
@@ -0,0 +1,6 @@
+/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
+/*# sourceMappingURL=bootstrap.min.css.map */
\ No newline at end of file
diff --git a/GitCandy.Web/Content/bootstrap.min.css.map b/GitCandy.Web/Content/bootstrap.min.css.map
new file mode 100644
index 0000000..6c7fa40
--- /dev/null
+++ b/GitCandy.Web/Content/bootstrap.min.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["less/normalize.less","less/print.less","bootstrap.css","dist/css/bootstrap.css","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/mixins/reset-text.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":";;;;4EAQA,KACE,YAAA,WACA,yBAAA,KACA,qBAAA,KAOF,KACE,OAAA,EAaF,QAAA,MAAA,QAAA,WAAA,OAAA,OAAA,OAAA,OAAA,KAAA,KAAA,IAAA,QAAA,QAaE,QAAA,MAQF,MAAA,OAAA,SAAA,MAIE,QAAA,aACA,eAAA,SAQF,sBACE,QAAA,KACA,OAAA,EAQF,SAAA,SAEE,QAAA,KAUF,EACE,iBAAA,YAQF,SAAA,QAEE,QAAA,EAUF,YACE,cAAA,IAAA,OAOF,EAAA,OAEE,YAAA,IAOF,IACE,WAAA,OAQF,GACE,OAAA,MAAA,EACA,UAAA,IAOF,KACE,MAAA,KACA,WAAA,KAOF,MACE,UAAA,IAOF,IAAA,IAEE,SAAA,SACA,UAAA,IACA,YAAA,EACA,eAAA,SAGF,IACE,IAAA,MAGF,IACE,OAAA,OAUF,IACE,OAAA,EAOF,eACE,SAAA,OAUF,OACE,OAAA,IAAA,KAOF,GACE,OAAA,EAAA,mBAAA,YAAA,gBAAA,YACA,WAAA,YAOF,IACE,SAAA,KAOF,KAAA,IAAA,IAAA,KAIE,YAAA,UAAA,UACA,UAAA,IAkBF,OAAA,MAAA,SAAA,OAAA,SAKE,OAAA,EACA,KAAA,QACA,MAAA,QAOF,OACE,SAAA,QAUF,OAAA,OAEE,eAAA,KAWF,OAAA,wBAAA,kBAAA,mBAIE,mBAAA,OACA,OAAA,QAOF,iBAAA,qBAEE,OAAA,QAOF,yBAAA,wBAEE,QAAA,EACA,OAAA,EAQF,MACE,YAAA,OAWF,qBAAA,kBAEE,mBAAA,WAAA,gBAAA,WAAA,WAAA,WACA,QAAA,EASF,8CAAA,8CAEE,OAAA,KAQF,mBACE,mBAAA,YACA,gBAAA,YAAA,WAAA,YAAA,mBAAA,UASF,iDAAA,8CAEE,mBAAA,KAOF,SACE,QAAA,MAAA,OAAA,MACA,OAAA,EAAA,IACA,OAAA,IAAA,MAAA,OAQF,OACE,QAAA,EACA,OAAA,EAOF,SACE,SAAA,KAQF,SACE,YAAA,IAUF,MACE,eAAA,EACA,gBAAA,SAGF,GAAA,GAEE,QAAA,uFCjUF,aA7FI,EAAA,OAAA,QAGI,MAAA,eACA,YAAA,eACA,WAAA,cAAA,mBAAA,eACA,WAAA,eAGJ,EAAA,UAEI,gBAAA,UAGJ,cACI,QAAA,KAAA,WAAA,IAGJ,kBACI,QAAA,KAAA,YAAA,IAKJ,6BAAA,mBAEI,QAAA,GAGJ,WAAA,IAEI,OAAA,IAAA,MAAA,KC4KL,kBAAA,MDvKK,MC0KL,QAAA,mBDrKK,IE8KN,GDLC,kBAAA,MDrKK,ICwKL,UAAA,eCUD,GF5KM,GE2KN,EF1KM,QAAA,ECuKL,OAAA,ECSD,GF3KM,GCsKL,iBAAA,MD/JK,QCkKL,QAAA,KCSD,YFtKU,oBCiKT,iBAAA,eD7JK,OCgKL,OAAA,IAAA,MAAA,KD5JK,OC+JL,gBAAA,mBCSD,UFpKU,UC+JT,iBAAA,eDzJS,mBEkKV,mBDLC,OAAA,IAAA,MAAA,gBEjPD,WACA,YAAA,uBFsPD,IAAA,+CE7OC,IAAK,sDAAuD,4BAA6B,iDAAkD,gBAAiB,gDAAiD,eAAgB,+CAAgD,mBAAoB,2EAA4E,cAE7W,WACA,SAAA,SACA,IAAA,IACA,QAAA,aACA,YAAA,uBACA,WAAA,OACA,YAAA,IACA,YAAA,EAIkC,uBAAA,YAAW,wBAAA,UACX,2BAAW,QAAA,QAEX,uBDuPlC,QAAS,QCtPyB,sBFiPnC,uBEjP8C,QAAA,QACX,wBAAW,QAAA,QACX,wBAAW,QAAA,QACX,2BAAW,QAAA,QACX,yBAAW,QAAA,QACX,wBAAW,QAAA,QACX,wBAAW,QAAA,QACX,yBAAW,QAAA,QACX,wBAAW,QAAA,QACX,uBAAW,QAAA,QACX,6BAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,2BAAW,QAAA,QACX,qBAAW,QAAA,QACX,0BAAW,QAAA,QACX,qBAAW,QAAA,QACX,yBAAW,QAAA,QACX,0BAAW,QAAA,QACX,2BAAW,QAAA,QACX,sBAAW,QAAA,QACX,yBAAW,QAAA,QACX,sBAAW,QAAA,QACX,wBAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,+BAAW,QAAA,QACX,2BAAW,QAAA,QACX,yBAAW,QAAA,QACX,wBAAW,QAAA,QACX,8BAAW,QAAA,QACX,yBAAW,QAAA,QACX,0BAAW,QAAA,QACX,2BAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,6BAAW,QAAA,QACX,6BAAW,QAAA,QACX,8BAAW,QAAA,QACX,4BAAW,QAAA,QACX,yBAAW,QAAA,QACX,0BAAW,QAAA,QACX,sBAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,2BAAW,QAAA,QACX,wBAAW,QAAA,QACX,yBAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,yBAAW,QAAA,QACX,8BAAW,QAAA,QACX,6BAAW,QAAA,QACX,6BAAW,QAAA,QACX,+BAAW,QAAA,QACX,8BAAW,QAAA,QACX,gCAAW,QAAA,QACX,uBAAW,QAAA,QACX,8BAAW,QAAA,QACX,+BAAW,QAAA,QACX,iCAAW,QAAA,QACX,0BAAW,QAAA,QACX,6BAAW,QAAA,QACX,yBAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,wBAAW,QAAA,QACX,wBAAW,QAAA,QACX,uBAAW,QAAA,QACX,gCAAW,QAAA,QACX,gCAAW,QAAA,QACX,2BAAW,QAAA,QACX,uBAAW,QAAA,QACX,wBAAW,QAAA,QACX,uBAAW,QAAA,QACX,0BAAW,QAAA,QACX,+BAAW,QAAA,QACX,+BAAW,QAAA,QACX,wBAAW,QAAA,QACX,+BAAW,QAAA,QACX,gCAAW,QAAA,QACX,4BAAW,QAAA,QACX,6BAAW,QAAA,QACX,8BAAW,QAAA,QACX,0BAAW,QAAA,QACX,gCAAW,QAAA,QACX,4BAAW,QAAA,QACX,6BAAW,QAAA,QACX,gCAAW,QAAA,QACX,4BAAW,QAAA,QACX,6BAAW,QAAA,QACX,6BAAW,QAAA,QACX,8BAAW,QAAA,QACX,2BAAW,QAAA,QACX,6BAAW,QAAA,QACX,4BAAW,QAAA,QACX,8BAAW,QAAA,QACX,+BAAW,QAAA,QACX,mCAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,2BAAW,QAAA,QACX,4BAAW,QAAA,QACX,+BAAW,QAAA,QACX,wBAAW,QAAA,QACX,2BAAW,QAAA,QACX,yBAAW,QAAA,QACX,0BAAW,QAAA,QACX,yBAAW,QAAA,QACX,6BAAW,QAAA,QACX,+BAAW,QAAA,QACX,0BAAW,QAAA,QACX,gCAAW,QAAA,QACX,+BAAW,QAAA,QACX,8BAAW,QAAA,QACX,kCAAW,QAAA,QACX,oCAAW,QAAA,QACX,sBAAW,QAAA,QACX,2BAAW,QAAA,QACX,uBAAW,QAAA,QACX,8BAAW,QAAA,QACX,4BAAW,QAAA,QACX,8BAAW,QAAA,QACX,6BAAW,QAAA,QACX,4BAAW,QAAA,QACX,0BAAW,QAAA,QACX,4BAAW,QAAA,QACX,qCAAW,QAAA,QACX,oCAAW,QAAA,QACX,kCAAW,QAAA,QACX,oCAAW,QAAA,QACX,wBAAW,QAAA,QACX,yBAAW,QAAA,QACX,wBAAW,QAAA,QACX,yBAAW,QAAA,QACX,4BAAW,QAAA,QACX,6BAAW,QAAA,QACX,4BAAW,QAAA,QACX,4BAAW,QAAA,QACX,8BAAW,QAAA,QACX,uBAAW,QAAA,QACX,wBAAW,QAAA,QACX,0BAAW,QAAA,QACX,sBAAW,QAAA,QACX,sBAAW,QAAA,QACX,uBAAW,QAAA,QACX,mCAAW,QAAA,QACX,uCAAW,QAAA,QACX,gCAAW,QAAA,QACX,oCAAW,QAAA,QACX,qCAAW,QAAA,QACX,yCAAW,QAAA,QACX,4BAAW,QAAA,QACX,yBAAW,QAAA,QACX,gCAAW,QAAA,QACX,8BAAW,QAAA,QACX,yBAAW,QAAA,QACX,wBAAW,QAAA,QACX,0BAAW,QAAA,QACX,6BAAW,QAAA,QACX,yBAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,wBAAW,QAAA,QACX,yBAAW,QAAA,QACX,yBAAW,QAAA,QACX,uBAAW,QAAA,QACX,8BAAW,QAAA,QACX,+BAAW,QAAA,QACX,gCAAW,QAAA,QACX,8BAAW,QAAA,QACX,8BAAW,QAAA,QACX,8BAAW,QAAA,QACX,2BAAW,QAAA,QACX,0BAAW,QAAA,QACX,yBAAW,QAAA,QACX,6BAAW,QAAA,QACX,2BAAW,QAAA,QACX,4BAAW,QAAA,QACX,wBAAW,QAAA,QACX,wBAAW,QAAA,QACX,2BAAW,QAAA,QACX,2BAAW,QAAA,QACX,4BAAW,QAAA,QACX,+BAAW,QAAA,QACX,8BAAW,QAAA,QACX,4BAAW,QAAA,QACX,4BAAW,QAAA,QACX,4BAAW,QAAA,QACX,iCAAW,QAAA,QACX,oCAAW,QAAA,QACX,iCAAW,QAAA,QACX,+BAAW,QAAA,QACX,+BAAW,QAAA,QACX,iCAAW,QAAA,QACX,qBAAW,QAAA,QACX,4BAAW,QAAA,QACX,4BAAW,QAAA,QACX,2BAAW,QAAA,QACX,uBAAW,QAAA,QASX,wBAAW,QAAA,QACX,wBAAW,QAAA,QACX,4BAAW,QAAA,QACX,uBAAW,QAAA,QACX,wBAAW,QAAA,QACX,uBAAW,QAAA,QACX,yBAAW,QAAA,QACX,yBAAW,QAAA,QACX,+BAAW,QAAA,QACX,uBAAW,QAAA,QACX,6BAAW,QAAA,QACX,sBAAW,QAAA,QACX,wBAAW,QAAA,QACX,wBAAW,QAAA,QACX,4BAAW,QAAA,QACX,uBAAW,QAAA,QACX,4BAAW,QAAA,QACX,6BAAW,QAAA,QACX,2BAAW,QAAA,QACX,0BAAW,QAAA,QACX,sBAAW,QAAA,QACX,sBAAW,QAAA,QACX,sBAAW,QAAA,QACX,sBAAW,QAAA,QACX,wBAAW,QAAA,QACX,sBAAW,QAAA,QACX,wBAAW,QAAA,QACX,4BAAW,QAAA,QACX,mCAAW,QAAA,QACX,4BAAW,QAAA,QACX,oCAAW,QAAA,QACX,kCAAW,QAAA,QACX,iCAAW,QAAA,QACX,+BAAW,QAAA,QACX,sBAAW,QAAA,QACX,wBAAW,QAAA,QACX,6BAAW,QAAA,QACX,4BAAW,QAAA,QACX,6BAAW,QAAA,QACX,kCAAW,QAAA,QACX,mCAAW,QAAA,QACX,sCAAW,QAAA,QACX,0CAAW,QAAA,QACX,oCAAW,QAAA,QACX,wCAAW,QAAA,QACX,qCAAW,QAAA,QACX,iCAAW,QAAA,QACX,gCAAW,QAAA,QACX,kCAAW,QAAA,QACX,+BAAW,QAAA,QACX,0BAAW,QAAA,QACX,8BAAW,QAAA,QACX,4BAAW,QAAA,QACX,4BAAW,QAAA,QACX,6BAAW,QAAA,QACX,4BAAW,QAAA,QCtS/C,0BCgEE,QAAA,QHi+BF,EDNC,mBAAA,WGxhCI,gBAAiB,WFiiCZ,WAAY,WGl+BZ,OADL,QJg+BJ,mBAAA,WGthCI,gBAAiB,WACpB,WAAA,WHyhCD,KGrhCC,UAAW,KAEX,4BAAA,cAEA,KACA,YAAA,iBAAA,UAAA,MAAA,WHuhCD,UAAA,KGnhCC,YAAa,WF4hCb,MAAO,KACP,iBAAkB,KExhClB,OADA,MAEA,OHqhCD,SG/gCC,YAAa,QACb,UAAA,QACA,YAAA,QAEA,EFwhCA,MAAO,QEthCL,gBAAA,KAIF,QH8gCD,QKjkCC,MAAA,QACA,gBAAA,UF6DF,QACE,QAAA,IAAA,KAAA,yBHygCD,eAAA,KGlgCC,OHqgCD,OAAA,ECSD,IACE,eAAgB,ODDjB,4BM/kCC,0BLklCF,gBKnlCE,iBADA,eH4EA,QAAS,MACT,UAAA,KHugCD,OAAA,KGhgCC,aACA,cAAA,IAEA,eACA,QAAA,aC6FA,UAAA,KACK,OAAA,KACG,QAAA,IEvLR,YAAA,WACA,iBAAA,KACA,OAAA,IAAA,MAAA,KN+lCD,cAAA,IGjgCC,mBAAoB,IAAI,IAAI,YAC5B,cAAA,IAAA,IAAA,YHmgCD,WAAA,IAAA,IAAA,YG5/BC,YACA,cAAA,IAEA,GH+/BD,WAAA,KGv/BC,cAAe,KACf,OAAA,EACA,WAAA,IAAA,MAAA,KAEA,SACA,SAAA,SACA,MAAA,IACA,OAAA,IACA,QAAA,EHy/BD,OAAA,KGj/BC,SAAA,OF0/BA,KAAM,cEx/BJ,OAAA,EAEA,0BACA,yBACA,SAAA,OACA,MAAA,KHm/BH,OAAA,KGx+BC,OAAQ,EACR,SAAA,QH0+BD,KAAA,KCSD,cACE,OAAQ,QAQV,IACA,IMlpCE,IACA,IACA,IACA,INwoCF,GACA,GACA,GACA,GACA,GACA,GDAC,YAAA,QOlpCC,YAAa,IN2pCb,YAAa,IACb,MAAO,QAoBT,WAZA,UAaA,WAZA,UM5pCI,WN6pCJ,UM5pCI,WN6pCJ,UM5pCI,WN6pCJ,UDMC,WCLD,UACA,UAZA,SAaA,UAZA,SAaA,UAZA,SAaA,UAZA,SAaA,UAZA,SAaA,UAZA,SMppCE,YAAa,INwqCb,YAAa,EACb,MAAO,KAGT,IMxqCE,IAJF,IN2qCA,GAEA,GDLC,GCSC,WAAY,KACZ,cAAe,KASjB,WANA,UDCC,WCCD,UM5qCA,WN8qCA,UACA,UANA,SM5qCI,UN8qCJ,SM3qCA,UN6qCA,SAQE,UAAW,IAGb,IMprCE,IAJF,INurCA,GAEA,GDLC,GCSC,WAAY,KACZ,cAAe,KASjB,WANA,UDCC,WCCD,UMvrCA,WNyrCA,UACA,UANA,SMxrCI,UN0rCJ,SMtrCA,UNwrCA,SMxrCU,UAAA,IACV,IAAA,GAAU,UAAA,KACV,IAAA,GAAU,UAAA,KACV,IAAA,GAAU,UAAA,KACV,IAAA,GAAU,UAAA,KACV,IAAA,GAAU,UAAA,KAOR,IADF,GPssCC,UAAA,KCSD,EMzsCE,OAAA,EAAA,EAAA,KAEA,MPosCD,cAAA,KO/rCC,UAAW,KAwOX,YAAa,IA1OX,YAAA,IPssCH,yBO7rCC,MNssCE,UAAW,MMjsCf,OAAA,MAEE,UAAA,IAKF,MP0rCC,KO1rCsB,QAAA,KP6rCtB,iBAAA,QO5rCsB,WP+rCtB,WAAA,KO9rCsB,YPisCtB,WAAA,MOhsCsB,aPmsCtB,WAAA,OOlsCsB,cPqsCtB,WAAA,QOlsCsB,aPqsCtB,YAAA,OOpsCsB,gBPusCtB,eAAA,UOtsCsB,gBPysCtB,eAAA,UOrsCC,iBPwsCD,eAAA,WQ3yCC,YR8yCD,MAAA,KCSD,cOpzCI,MAAA,QAHF,qBDwGF,qBP6sCC,MAAA,QCSD,cO3zCI,MAAA,QAHF,qBD2GF,qBPitCC,MAAA,QCSD,WOl0CI,MAAA,QAHF,kBD8GF,kBPqtCC,MAAA,QCSD,cOz0CI,MAAA,QAHF,qBDiHF,qBPytCC,MAAA,QCSD,aOh1CI,MAAA,QDwHF,oBAHF,oBExHE,MAAA,QACA,YR01CA,MAAO,KQx1CL,iBAAA,QAHF,mBF8HF,mBP2tCC,iBAAA,QCSD,YQ/1CI,iBAAA,QAHF,mBFiIF,mBP+tCC,iBAAA,QCSD,SQt2CI,iBAAA,QAHF,gBFoIF,gBPmuCC,iBAAA,QCSD,YQ72CI,iBAAA,QAHF,mBFuIF,mBPuuCC,iBAAA,QCSD,WQp3CI,iBAAA,QF6IF,kBADF,kBAEE,iBAAA,QPsuCD,aO7tCC,eAAgB,INsuChB,OAAQ,KAAK,EAAE,KMpuCf,cAAA,IAAA,MAAA,KAFF,GPkuCC,GCSC,WAAY,EACZ,cAAe,KM9tCf,MP0tCD,MO3tCD,MAPI,MASF,cAAA,EAIF,eALE,aAAA,EACA,WAAA,KPkuCD,aO9tCC,aAAc,EAKZ,YAAA,KACA,WAAA,KP6tCH,gBOvtCC,QAAS,aACT,cAAA,IACA,aAAA,IAEF,GNguCE,WAAY,EM9tCZ,cAAA,KAGA,GADF,GP0tCC,YAAA,WOttCC,GPytCD,YAAA,IOnnCD,GAvFM,YAAA,EAEA,yBACA,kBGtNJ,MAAA,KACA,MAAA,MACA,SAAA,OVq6CC,MAAA,KO7nCC,WAAY,MAhFV,cAAA,SPgtCH,YAAA,OOtsCD,kBNgtCE,YAAa,OM1sCjB,0BPssCC,YOrsCC,OAAA,KA9IqB,cAAA,IAAA,OAAA,KAmJvB,YACE,UAAA,IACA,eAAA,UAEA,WPssCD,QAAA,KAAA,KOjsCG,OAAA,EAAA,EAAA,KN0sCF,UAAW,OACX,YAAa,IAAI,MAAM,KMptCzB,yBP+sCC,wBO/sCD,yBNytCE,cAAe,EMnsCb,kBAFA,kBACA,iBPksCH,QAAA,MO/rCG,UAAA,INwsCF,YAAa,WACb,MAAO,KMhsCT,yBP2rCC,yBO3rCD,wBAEE,QAAA,cAEA,oBACA,sBACA,cAAA,KP6rCD,aAAA,EOvrCG,WAAA,MNgsCF,aAAc,IAAI,MAAM,KACxB,YAAa,EMhsCX,kCNksCJ,kCMnsCe,iCACX,oCNmsCJ,oCDLC,mCCUC,QAAS,GMjsCX,iCNmsCA,iCMzsCM,gCAOJ,mCNmsCF,mCDLC,kCO7rCC,QAAA,cPksCD,QWv+CC,cAAe,KVg/Cf,WAAY,OACZ,YAAa,WU7+Cb,KXy+CD,IWr+CD,IACE,KACA,YAAA,MAAA,OAAA,SAAA,cAAA,UAEA,KACA,QAAA,IAAA,IXu+CD,UAAA,IWn+CC,MAAO,QACP,iBAAA,QACA,cAAA,IAEA,IACA,QAAA,IAAA,IACA,UAAA,IV4+CA,MU5+CA,KXq+CD,iBAAA,KW3+CC,cAAe,IASb,mBAAA,MAAA,EAAA,KAAA,EAAA,gBACA,WAAA,MAAA,EAAA,KAAA,EAAA,gBAEA,QV6+CF,QU7+CE,EXq+CH,UAAA,KWh+CC,YAAa,IACb,mBAAA,KACA,WAAA,KAEA,IACA,QAAA,MACA,QAAA,MACA,OAAA,EAAA,EAAA,KACA,UAAA,KACA,YAAA,WACA,MAAA,KACA,WAAA,UXk+CD,UAAA,WW7+CC,iBAAkB,QAehB,OAAA,IAAA,MAAA,KACA,cAAA,IAEA,SACA,QAAA,EACA,UAAA,QXi+CH,MAAA,QW59CC,YAAa,SACb,iBAAA,YACA,cAAA,EC1DF,gBCHE,WAAA,MACA,WAAA,OAEA,Wb8hDD,cAAA,KYxhDC,aAAA,KAqEA,aAAc,KAvEZ,YAAA,KZ+hDH,yBY1hDC,WAkEE,MAAO,OZ69CV,yBY5hDC,WA+DE,MAAO,OZk+CV,0BYzhDC,WCvBA,MAAA,QAGA,iBbmjDD,cAAA,KYthDC,aAAc,KCvBd,aAAA,KACA,YAAA,KCAE,KACE,aAAA,MAEA,YAAA,MAGA,UAAA,WAAA,WAAA,WAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,WAAA,WAAA,WAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,WAAA,WAAA,WAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,WAAA,WAAA,WAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UdgjDL,SAAA,SchiDG,WAAA,IACE,cAAA,KdkiDL,aAAA,Kc1hDG,UAAA,WAAA,WAAA,WAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,Ud6hDH,MAAA,Kc7hDG,WdgiDH,MAAA,KchiDG,WdmiDH,MAAA,acniDG,WdsiDH,MAAA,actiDG,UdyiDH,MAAA,IcziDG,Ud4iDH,MAAA,ac5iDG,Ud+iDH,MAAA,ac/iDG,UdkjDH,MAAA,IcljDG,UdqjDH,MAAA,acrjDG,UdwjDH,MAAA,acxjDG,Ud2jDH,MAAA,Ic3jDG,Ud8jDH,MAAA,ac/iDG,UdkjDH,MAAA,YcljDG,gBdqjDH,MAAA,KcrjDG,gBdwjDH,MAAA,acxjDG,gBd2jDH,MAAA,ac3jDG,ed8jDH,MAAA,Ic9jDG,edikDH,MAAA,acjkDG,edokDH,MAAA,acpkDG,edukDH,MAAA,IcvkDG,ed0kDH,MAAA,ac1kDG,ed6kDH,MAAA,ac7kDG,edglDH,MAAA,IchlDG,edmlDH,MAAA,ac9kDG,edilDH,MAAA,YchmDG,edmmDH,MAAA,KcnmDG,gBdsmDH,KAAA,KctmDG,gBdymDH,KAAA,aczmDG,gBd4mDH,KAAA,ac5mDG,ed+mDH,KAAA,Ic/mDG,edknDH,KAAA,aclnDG,edqnDH,KAAA,acrnDG,edwnDH,KAAA,IcxnDG,ed2nDH,KAAA,ac3nDG,ed8nDH,KAAA,ac9nDG,edioDH,KAAA,IcjoDG,edooDH,KAAA,ac/nDG,edkoDH,KAAA,YcnnDG,edsnDH,KAAA,KctnDG,kBdynDH,YAAA,KcznDG,kBd4nDH,YAAA,ac5nDG,kBd+nDH,YAAA,ac/nDG,iBdkoDH,YAAA,IcloDG,iBdqoDH,YAAA,acroDG,iBdwoDH,YAAA,acxoDG,iBd2oDH,YAAA,Ic3oDG,iBd8oDH,YAAA,ac9oDG,iBdipDH,YAAA,acjpDG,iBdopDH,YAAA,IcppDG,iBdupDH,YAAA,acvpDG,iBd0pDH,YAAA,Yc5rDG,iBACE,YAAA,EAOJ,yBACE,UAAA,WAAA,WAAA,WAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,Ud0rDD,MAAA,Kc1rDC,Wd6rDD,MAAA,Kc7rDC,WdgsDD,MAAA,achsDC,WdmsDD,MAAA,acnsDC,UdssDD,MAAA,IctsDC,UdysDD,MAAA,aczsDC,Ud4sDD,MAAA,ac5sDC,Ud+sDD,MAAA,Ic/sDC,UdktDD,MAAA,acltDC,UdqtDD,MAAA,acrtDC,UdwtDD,MAAA,IcxtDC,Ud2tDD,MAAA,ac5sDC,Ud+sDD,MAAA,Yc/sDC,gBdktDD,MAAA,KcltDC,gBdqtDD,MAAA,acrtDC,gBdwtDD,MAAA,acxtDC,ed2tDD,MAAA,Ic3tDC,ed8tDD,MAAA,ac9tDC,ediuDD,MAAA,acjuDC,edouDD,MAAA,IcpuDC,eduuDD,MAAA,acvuDC,ed0uDD,MAAA,ac1uDC,ed6uDD,MAAA,Ic7uDC,edgvDD,MAAA,ac3uDC,ed8uDD,MAAA,Yc7vDC,edgwDD,MAAA,KchwDC,gBdmwDD,KAAA,KcnwDC,gBdswDD,KAAA,actwDC,gBdywDD,KAAA,aczwDC,ed4wDD,KAAA,Ic5wDC,ed+wDD,KAAA,ac/wDC,edkxDD,KAAA,aclxDC,edqxDD,KAAA,IcrxDC,edwxDD,KAAA,acxxDC,ed2xDD,KAAA,ac3xDC,ed8xDD,KAAA,Ic9xDC,ediyDD,KAAA,ac5xDC,ed+xDD,KAAA,YchxDC,edmxDD,KAAA,KcnxDC,kBdsxDD,YAAA,KctxDC,kBdyxDD,YAAA,aczxDC,kBd4xDD,YAAA,ac5xDC,iBd+xDD,YAAA,Ic/xDC,iBdkyDD,YAAA,aclyDC,iBdqyDD,YAAA,acryDC,iBdwyDD,YAAA,IcxyDC,iBd2yDD,YAAA,ac3yDC,iBd8yDD,YAAA,ac9yDC,iBdizDD,YAAA,IcjzDC,iBdozDD,YAAA,acpzDC,iBduzDD,YAAA,YY9yDD,iBE3CE,YAAA,GAQF,yBACE,UAAA,WAAA,WAAA,WAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,Udw1DD,MAAA,Kcx1DC,Wd21DD,MAAA,Kc31DC,Wd81DD,MAAA,ac91DC,Wdi2DD,MAAA,acj2DC,Udo2DD,MAAA,Icp2DC,Udu2DD,MAAA,acv2DC,Ud02DD,MAAA,ac12DC,Ud62DD,MAAA,Ic72DC,Udg3DD,MAAA,ach3DC,Udm3DD,MAAA,acn3DC,Uds3DD,MAAA,Ict3DC,Udy3DD,MAAA,ac12DC,Ud62DD,MAAA,Yc72DC,gBdg3DD,MAAA,Kch3DC,gBdm3DD,MAAA,acn3DC,gBds3DD,MAAA,act3DC,edy3DD,MAAA,Icz3DC,ed43DD,MAAA,ac53DC,ed+3DD,MAAA,ac/3DC,edk4DD,MAAA,Icl4DC,edq4DD,MAAA,acr4DC,edw4DD,MAAA,acx4DC,ed24DD,MAAA,Ic34DC,ed84DD,MAAA,acz4DC,ed44DD,MAAA,Yc35DC,ed85DD,MAAA,Kc95DC,gBdi6DD,KAAA,Kcj6DC,gBdo6DD,KAAA,acp6DC,gBdu6DD,KAAA,acv6DC,ed06DD,KAAA,Ic16DC,ed66DD,KAAA,ac76DC,edg7DD,KAAA,ach7DC,edm7DD,KAAA,Icn7DC,eds7DD,KAAA,act7DC,edy7DD,KAAA,acz7DC,ed47DD,KAAA,Ic57DC,ed+7DD,KAAA,ac17DC,ed67DD,KAAA,Yc96DC,edi7DD,KAAA,Kcj7DC,kBdo7DD,YAAA,Kcp7DC,kBdu7DD,YAAA,acv7DC,kBd07DD,YAAA,ac17DC,iBd67DD,YAAA,Ic77DC,iBdg8DD,YAAA,ach8DC,iBdm8DD,YAAA,acn8DC,iBds8DD,YAAA,Ict8DC,iBdy8DD,YAAA,acz8DC,iBd48DD,YAAA,ac58DC,iBd+8DD,YAAA,Ic/8DC,iBdk9DD,YAAA,acl9DC,iBdq9DD,YAAA,YYz8DD,iBE9CE,YAAA,GAQF,0BACE,UAAA,WAAA,WAAA,WAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,Uds/DD,MAAA,Kct/DC,Wdy/DD,MAAA,Kcz/DC,Wd4/DD,MAAA,ac5/DC,Wd+/DD,MAAA,ac//DC,UdkgED,MAAA,IclgEC,UdqgED,MAAA,acrgEC,UdwgED,MAAA,acxgEC,Ud2gED,MAAA,Ic3gEC,Ud8gED,MAAA,ac9gEC,UdihED,MAAA,acjhEC,UdohED,MAAA,IcphEC,UduhED,MAAA,acxgEC,Ud2gED,MAAA,Yc3gEC,gBd8gED,MAAA,Kc9gEC,gBdihED,MAAA,acjhEC,gBdohED,MAAA,acphEC,eduhED,MAAA,IcvhEC,ed0hED,MAAA,ac1hEC,ed6hED,MAAA,ac7hEC,edgiED,MAAA,IchiEC,edmiED,MAAA,acniEC,edsiED,MAAA,actiEC,edyiED,MAAA,IcziEC,ed4iED,MAAA,acviEC,ed0iED,MAAA,YczjEC,ed4jED,MAAA,Kc5jEC,gBd+jED,KAAA,Kc/jEC,gBdkkED,KAAA,aclkEC,gBdqkED,KAAA,acrkEC,edwkED,KAAA,IcxkEC,ed2kED,KAAA,ac3kEC,ed8kED,KAAA,ac9kEC,edilED,KAAA,IcjlEC,edolED,KAAA,acplEC,edulED,KAAA,acvlEC,ed0lED,KAAA,Ic1lEC,ed6lED,KAAA,acxlEC,ed2lED,KAAA,Yc5kEC,ed+kED,KAAA,Kc/kEC,kBdklED,YAAA,KcllEC,kBdqlED,YAAA,acrlEC,kBdwlED,YAAA,acxlEC,iBd2lED,YAAA,Ic3lEC,iBd8lED,YAAA,ac9lEC,iBdimED,YAAA,acjmEC,iBdomED,YAAA,IcpmEC,iBdumED,YAAA,acvmEC,iBd0mED,YAAA,ac1mEC,iBd6mED,YAAA,Ic7mEC,iBdgnED,YAAA,achnEC,iBdmnED,YAAA,YetrED,iBACA,YAAA,GAGA,MACA,iBAAA,YAEA,QfyrED,YAAA,IevrEC,eAAgB,IAChB,MAAA,KfyrED,WAAA,KelrEC,GACA,WAAA,KfsrED,OexrEC,MAAO,KdmsEP,UAAW,KACX,cAAe,KcvrET,mBd0rER,mBczrEQ,mBAHA,mBACA,mBd0rER,mBDHC,QAAA,IensEC,YAAa,WAoBX,eAAA,IACA,WAAA,IAAA,MAAA,KArBJ,mBdktEE,eAAgB,OAChB,cAAe,IAAI,MAAM,KDJ1B,uCCMD,uCcrtEA,wCdstEA,wCclrEI,2CANI,2CforEP,WAAA,EezqEG,mBf4qEH,WAAA,IAAA,MAAA,KCWD,cACE,iBAAkB,Kc/pEpB,6BdkqEA,6BcjqEE,6BAZM,6BfsqEP,6BCMD,6BDHC,QAAA,ICWD,gBACE,OAAQ,IAAI,MAAM,Kc1qEpB,4Bd6qEA,4Bc7qEA,4BAQQ,4Bf8pEP,4BCMD,4Bc7pEM,OAAA,IAAA,MAAA,KAYF,4BAFJ,4BfopEC,oBAAA,IevoEG,yCf0oEH,iBAAA,QehoEC,4BACA,iBAAA,QfooED,uBe9nEG,SAAA,OdyoEF,QAAS,acxoEL,MAAA,KAEA,sBfioEL,sBgB7wEC,SAAA,OfwxEA,QAAS,WACT,MAAO,KAST,0BerxEE,0Bf+wEF,0BAGA,0BexxEM,0BAMJ,0BfgxEF,0BAGA,0BACA,0BDNC,0BCAD,0BAGA,0BASE,iBAAkB,QDLnB,sCgBlyEC,sCAAA,oCfyyEF,sCetxEM,sCf2xEJ,iBAAkB,QASpB,2Be1yEE,2BfoyEF,2BAGA,2Be7yEM,2BAMJ,2BfqyEF,2BAGA,2BACA,2BDNC,2BCAD,2BAGA,2BASE,iBAAkB,QDLnB,uCgBvzEC,uCAAA,qCf8zEF,uCe3yEM,uCfgzEJ,iBAAkB,QASpB,wBe/zEE,wBfyzEF,wBAGA,wBel0EM,wBAMJ,wBf0zEF,wBAGA,wBACA,wBDNC,wBCAD,wBAGA,wBASE,iBAAkB,QDLnB,oCgB50EC,oCAAA,kCfm1EF,oCeh0EM,oCfq0EJ,iBAAkB,QASpB,2Bep1EE,2Bf80EF,2BAGA,2Bev1EM,2BAMJ,2Bf+0EF,2BAGA,2BACA,2BDNC,2BCAD,2BAGA,2BASE,iBAAkB,QDLnB,uCgBj2EC,uCAAA,qCfw2EF,uCer1EM,uCf01EJ,iBAAkB,QASpB,0Bez2EE,0Bfm2EF,0BAGA,0Be52EM,0BAMJ,0Bfo2EF,0BAGA,0BACA,0BDNC,0BCAD,0BAGA,0BASE,iBAAkB,QDLnB,sCehtEC,sCADF,oCdwtEA,sCe12EM,sCDoJJ,iBAAA,QA6DF,kBACE,WAAY,KA3DV,WAAA,KAEA,oCACA,kBACA,MAAA,KfotED,cAAA,Ke7pEC,WAAY,OAnDV,mBAAA,yBfmtEH,OAAA,IAAA,MAAA,KCWD,yBACE,cAAe,Ec5qEjB,qCd+qEA,qCcjtEI,qCARM,qCfktET,qCCMD,qCDHC,YAAA,OCWD,kCACE,OAAQ,EcvrEV,0Dd0rEA,0Dc1rEA,0DAzBU,0Df4sET,0DCMD,0DAME,YAAa,Ec/rEf,yDdksEA,yDclsEA,yDArBU,yDfgtET,yDCMD,yDAME,aAAc,EDLjB,yDe1sEW,yDEzNV,yDjBk6EC,yDiBj6ED,cAAA,GAMA,SjBk6ED,UAAA,EiB/5EC,QAAS,EACT,OAAA,EACA,OAAA,EAEA,OACA,QAAA,MACA,MAAA,KACA,QAAA,EACA,cAAA,KACA,UAAA,KjBi6ED,YAAA,QiB95EC,MAAO,KACP,OAAA,EACA,cAAA,IAAA,MAAA,QAEA,MjBg6ED,QAAA,aiBr5EC,UAAW,Kb4BX,cAAA,IACG,YAAA,IJ63EJ,mBiBr5EC,mBAAoB,WhBg6EjB,gBAAiB,WgB95EpB,WAAA,WjBy5ED,qBiBv5EC,kBAGA,OAAQ,IAAI,EAAE,EACd,WAAA,MjBs5ED,YAAA,OiBj5EC,iBACA,QAAA,MAIF,kBhB25EE,QAAS,MgBz5ET,MAAA,KAIF,iBAAA,ahB05EE,OAAQ,KI99ER,uBY2EF,2BjB64EC,wBiB54EC,QAAA,IAAA,KAAA,yBACA,eAAA,KAEA,OACA,QAAA,MjB+4ED,YAAA,IiBr3EC,UAAW,KACX,YAAA,WACA,MAAA,KAEA,cACA,QAAA,MACA,MAAA,KACA,OAAA,KACA,QAAA,IAAA,KACA,UAAA,KACA,YAAA,WACA,MAAA,KbxDA,iBAAA,KACQ,iBAAA,KAyHR,OAAA,IAAA,MAAA,KACK,cAAA,IACG,mBAAA,MAAA,EAAA,IAAA,IAAA,iBJwzET,WAAA,MAAA,EAAA,IAAA,IAAA,iBkBh8EC,mBAAA,aAAA,YAAA,KAAA,mBAAA,YAAA,KACE,cAAA,aAAA,YAAA,KAAA,WAAA,YAAA,KACA,WAAA,aAAA,YAAA,KAAA,WAAA,YAAA,KdWM,oBJy7ET,aAAA,QIx5EC,QAAA,EACE,mBAAA,MAAA,EAAA,IAAA,IAAA,iBAAA,EAAA,EAAA,IAAA,qBACA,WAAA,MAAA,EAAA,IAAA,IAAA,iBAAA,EAAA,EAAA,IAAA,qBAEF,gCAA0B,MAAA,KJ25E3B,QAAA,EI15EiC,oCJ65EjC,MAAA,KiBh4EG,yCACA,MAAA,KAQF,0BhBs4EA,iBAAkB,YAClB,OAAQ,EgBn4EN,wBjB63EH,wBiB13EC,iChBq4EA,iBAAkB,KgBn4EhB,QAAA,EAIF,wBACE,iCjB03EH,OAAA,YiB72EC,sBjBg3ED,OAAA,KiB91EG,mBhB02EF,mBAAoB,KAEtB,qDgB32EM,8BjBo2EH,8BiBj2EC,wCAAA,+BhB62EA,YAAa,KgB32EX,iCjBy2EH,iCiBt2EC,2CAAA,kChB02EF,0BACA,0BACA,oCACA,2BAKE,YAAa,KgBh3EX,iCjB82EH,iCACF,2CiBp2EC,kChBu2EA,0BACA,0BACA,oCACA,2BgBz2EA,YAAA,MhBi3EF,YgBv2EE,cAAA,KAGA,UADA,OjBi2ED,SAAA,SiBr2EC,QAAS,MhBg3ET,WAAY,KgBx2EV,cAAA,KAGA,gBADA,aAEA,WAAA,KjBi2EH,aAAA,KiB91EC,cAAe,EhBy2Ef,YAAa,IACb,OAAQ,QgBp2ER,+BjBg2ED,sCiBl2EC,yBACA,gCAIA,SAAU,ShBw2EV,WAAY,MgBt2EZ,YAAA,MAIF,oBAAA,cAEE,WAAA,KAGA,iBADA,cAEA,SAAA,SACA,QAAA,aACA,aAAA,KjB61ED,cAAA,EiB31EC,YAAa,IhBs2Eb,eAAgB,OgBp2EhB,OAAA,QAUA,kCjBo1ED,4BCWC,WAAY,EACZ,YAAa,KgBv1Eb,wCAAA,qCjBm1ED,8BCOD,+BgBh2EI,2BhB+1EJ,4BAME,OAAQ,YDNT,0BiBv1EG,uBAMF,oCAAA,iChB61EA,OAAQ,YDNT,yBiBp1EK,sBAaJ,mCAFF,gCAGE,OAAA,YAGA,qBjBy0ED,WAAA,KiBv0EC,YAAA,IhBk1EA,eAAgB,IgBh1Ed,cAAA,EjB00EH,8BiB5zED,8BCnQE,cAAA,EACA,aAAA,EAEA,UACA,OAAA,KlBkkFD,QAAA,IAAA,KkBhkFC,UAAA,KACE,YAAA,IACA,cAAA,IAGF,gBjB0kFA,OAAQ,KiBxkFN,YAAA,KD2PA,0BAFJ,kBAGI,OAAA,KAEA,6BACA,OAAA,KjBy0EH,QAAA,IAAA,KiB/0EC,UAAW,KAST,YAAA,IACA,cAAA,IAVJ,mChB81EE,OAAQ,KgBh1EN,YAAA,KAGA,6CAjBJ,qCAkBI,OAAA,KAEA,oCACA,OAAA,KjBy0EH,WAAA,KiBr0EC,QAAS,IAAI,KC/Rb,UAAA,KACA,YAAA,IAEA,UACA,OAAA,KlBumFD,QAAA,KAAA,KkBrmFC,UAAA,KACE,YAAA,UACA,cAAA,IAGF,gBjB+mFA,OAAQ,KiB7mFN,YAAA,KDuRA,0BAFJ,kBAGI,OAAA,KAEA,6BACA,OAAA,KjBk1EH,QAAA,KAAA,KiBx1EC,UAAW,KAST,YAAA,UACA,cAAA,IAVJ,mChBu2EE,OAAQ,KgBz1EN,YAAA,KAGA,6CAjBJ,qCAkBI,OAAA,KAEA,oCACA,OAAA,KjBk1EH,WAAA,KiBz0EC,QAAS,KAAK,KAEd,UAAA,KjB00ED,YAAA,UiBt0EG,cjBy0EH,SAAA,SiBp0EC,4BACA,cAAA,OAEA,uBACA,SAAA,SACA,IAAA,EACA,MAAA,EACA,QAAA,EACA,QAAA,MACA,MAAA,KjBu0ED,OAAA,KiBr0EC,YAAa,KhBg1Eb,WAAY,OACZ,eAAgB,KDLjB,oDiBv0EC,uCADA,iCAGA,MAAO,KhBg1EP,OAAQ,KACR,YAAa,KDLd,oDiBv0EC,uCADA,iCAKA,MAAO,KhB80EP,OAAQ,KACR,YAAa,KAKf,uBAEA,8BAJA,4BADA,yBAEA,oBAEA,2BDNC,4BkBruFG,mCAJA,yBD0ZJ,gCbvWE,MAAA,QJ2rFD,2BkBxuFG,aAAA,QACE,mBAAA,MAAA,EAAA,IAAA,IAAA,iBd4CJ,WAAA,MAAA,EAAA,IAAA,IAAA,iBJgsFD,iCiBz1EC,aAAc,QC5YZ,mBAAA,MAAA,EAAA,IAAA,IAAA,iBAAA,EAAA,EAAA,IAAA,QACA,WAAA,MAAA,EAAA,IAAA,IAAA,iBAAA,EAAA,EAAA,IAAA,QlByuFH,gCiB91EC,MAAO,QCtYL,iBAAA,QlBuuFH,aAAA,QCWD,oCACE,MAAO,QAKT,uBAEA,8BAJA,4BADA,yBAEA,oBAEA,2BDNC,4BkBnwFG,mCAJA,yBD6ZJ,gCb1WE,MAAA,QJytFD,2BkBtwFG,aAAA,QACE,mBAAA,MAAA,EAAA,IAAA,IAAA,iBd4CJ,WAAA,MAAA,EAAA,IAAA,IAAA,iBJ8tFD,iCiBp3EC,aAAc,QC/YZ,mBAAA,MAAA,EAAA,IAAA,IAAA,iBAAA,EAAA,EAAA,IAAA,QACA,WAAA,MAAA,EAAA,IAAA,IAAA,iBAAA,EAAA,EAAA,IAAA,QlBuwFH,gCiBz3EC,MAAO,QCzYL,iBAAA,QlBqwFH,aAAA,QCWD,oCACE,MAAO,QAKT,qBAEA,4BAJA,0BADA,uBAEA,kBAEA,yBDNC,0BkBjyFG,iCAJA,uBDgaJ,8Bb7WE,MAAA,QJuvFD,yBkBpyFG,aAAA,QACE,mBAAA,MAAA,EAAA,IAAA,IAAA,iBd4CJ,WAAA,MAAA,EAAA,IAAA,IAAA,iBJ4vFD,+BiB/4EC,aAAc,QClZZ,mBAAA,MAAA,EAAA,IAAA,IAAA,iBAAA,EAAA,EAAA,IAAA,QACA,WAAA,MAAA,EAAA,IAAA,IAAA,iBAAA,EAAA,EAAA,IAAA,QlBqyFH,8BiBp5EC,MAAO,QC5YL,iBAAA,QlBmyFH,aAAA,QiB/4EG,kCjBk5EH,MAAA,QiB/4EG,2CjBk5EH,IAAA,KiBv4EC,mDACA,IAAA,EAEA,YjB04ED,QAAA,MiBvzEC,WAAY,IAwEZ,cAAe,KAtIX,MAAA,QAEA,yBjBy3EH,yBiBrvEC,QAAS,aA/HP,cAAA,EACA,eAAA,OjBw3EH,2BiB1vEC,QAAS,aAxHP,MAAA,KjBq3EH,eAAA,OiBj3EG,kCACA,QAAA,aAmHJ,0BhB4wEE,QAAS,aACT,eAAgB,OgBr3Ed,wCjB82EH,6CiBtwED,2CjBywEC,MAAA,KiB72EG,wCACA,MAAA,KAmGJ,4BhBwxEE,cAAe,EgBp3Eb,eAAA,OAGA,uBADA,oBjB82EH,QAAA,aiBpxEC,WAAY,EhB+xEZ,cAAe,EgBr3EX,eAAA,OAsFN,6BAAA,0BAjFI,aAAA,EAiFJ,4CjB6xEC,sCiBx2EG,SAAA,SjB22EH,YAAA,EiBh2ED,kDhB42EE,IAAK,GgBl2EL,2BjB+1EH,kCiBh2EG,wBAEA,+BAXF,YAAa,IhBo3Eb,WAAY,EgBn2EV,cAAA,EJviBF,2BIshBF,wBJrhBE,WAAA,KI4jBA,6BAyBA,aAAc,MAnCV,YAAA,MAEA,yBjBw1EH,gCACF,YAAA,IiBx3EG,cAAe,EAwCf,WAAA,OAwBJ,sDAdQ,MAAA,KjB80EL,yBACF,+CiBn0EC,YAAA,KAEE,UAAW,MjBs0EZ,yBACF,+CmBp6FG,YAAa,IACf,UAAA,MAGA,KACA,QAAA,aACA,QAAA,IAAA,KAAA,cAAA,EACA,UAAA,KACA,YAAA,IACA,YAAA,WACA,WAAA,OC0CA,YAAA,OACA,eAAA,OACA,iBAAA,aACA,aAAA,ahB+JA,OAAA,QACG,oBAAA,KACC,iBAAA,KACI,gBAAA,KJ+tFT,YAAA,KmBv6FG,iBAAA,KlBm7FF,OAAQ,IAAI,MAAM,YAClB,cAAe,IkB96Ff,kBdzBA,kBACA,WLk8FD,kBCOD,kBADA,WAME,QAAS,IAAI,KAAK,yBAClB,eAAgB,KkBh7FhB,WnBy6FD,WmB56FG,WlBw7FF,MAAO,KkBn7FL,gBAAA,Kf6BM,YADR,YJk5FD,iBAAA,KmBz6FC,QAAA,ElBq7FA,mBAAoB,MAAM,EAAE,IAAI,IAAI,iBAC5B,WAAY,MAAM,EAAE,IAAI,IAAI,iBoBh+FpC,cAGA,ejB8DA,wBACQ,OAAA,YJ05FT,OAAA,kBmBz6FG,mBAAA,KlBq7FM,WAAY,KkBn7FhB,QAAA,IASN,eC3DE,yBACA,eAAA,KpBi+FD,aoB99FC,MAAA,KnB0+FA,iBAAkB,KmBx+FhB,aAAA,KpBk+FH,mBoBh+FO,mBAEN,MAAA,KACE,iBAAA,QACA,aAAA,QpBi+FH,mBoB99FC,MAAA,KnB0+FA,iBAAkB,QAClB,aAAc,QmBt+FR,oBADJ,oBpBi+FH,mCoB99FG,MAAA,KnB0+FF,iBAAkB,QAClB,aAAc,QmBt+FN,0BnB4+FV,0BAHA,0BmB1+FM,0BnB4+FN,0BAHA,0BDFC,yCoBx+FK,yCnB4+FN,yCmBv+FE,MAAA,KnB++FA,iBAAkB,QAClB,aAAc,QmBx+FZ,oBpBg+FH,oBoBh+FG,mCnB6+FF,iBAAkB,KmBz+FV,4BnB8+FV,4BAHA,4BDHC,6BCOD,6BAHA,6BkB39FA,sCClBM,sCnB8+FN,sCmBx+FI,iBAAA,KACA,aAAA,KDcJ,oBC9DE,MAAA,KACA,iBAAA,KpB0hGD,aoBvhGC,MAAA,KnBmiGA,iBAAkB,QmBjiGhB,aAAA,QpB2hGH,mBoBzhGO,mBAEN,MAAA,KACE,iBAAA,QACA,aAAA,QpB0hGH,mBoBvhGC,MAAA,KnBmiGA,iBAAkB,QAClB,aAAc,QmB/hGR,oBADJ,oBpB0hGH,mCoBvhGG,MAAA,KnBmiGF,iBAAkB,QAClB,aAAc,QmB/hGN,0BnBqiGV,0BAHA,0BmBniGM,0BnBqiGN,0BAHA,0BDFC,yCoBjiGK,yCnBqiGN,yCmBhiGE,MAAA,KnBwiGA,iBAAkB,QAClB,aAAc,QmBjiGZ,oBpByhGH,oBoBzhGG,mCnBsiGF,iBAAkB,KmBliGV,4BnBuiGV,4BAHA,4BDHC,6BCOD,6BAHA,6BkBjhGA,sCCrBM,sCnBuiGN,sCmBjiGI,iBAAA,QACA,aAAA,QDkBJ,oBClEE,MAAA,QACA,iBAAA,KpBmlGD,aoBhlGC,MAAA,KnB4lGA,iBAAkB,QmB1lGhB,aAAA,QpBolGH,mBoBllGO,mBAEN,MAAA,KACE,iBAAA,QACA,aAAA,QpBmlGH,mBoBhlGC,MAAA,KnB4lGA,iBAAkB,QAClB,aAAc,QmBxlGR,oBADJ,oBpBmlGH,mCoBhlGG,MAAA,KnB4lGF,iBAAkB,QAClB,aAAc,QmBxlGN,0BnB8lGV,0BAHA,0BmB5lGM,0BnB8lGN,0BAHA,0BDFC,yCoB1lGK,yCnB8lGN,yCmBzlGE,MAAA,KnBimGA,iBAAkB,QAClB,aAAc,QmB1lGZ,oBpBklGH,oBoBllGG,mCnB+lGF,iBAAkB,KmB3lGV,4BnBgmGV,4BAHA,4BDHC,6BCOD,6BAHA,6BkBtkGA,sCCzBM,sCnBgmGN,sCmB1lGI,iBAAA,QACA,aAAA,QDsBJ,oBCtEE,MAAA,QACA,iBAAA,KpB4oGD,UoBzoGC,MAAA,KnBqpGA,iBAAkB,QmBnpGhB,aAAA,QpB6oGH,gBoB3oGO,gBAEN,MAAA,KACE,iBAAA,QACA,aAAA,QpB4oGH,gBoBzoGC,MAAA,KnBqpGA,iBAAkB,QAClB,aAAc,QmBjpGR,iBADJ,iBpB4oGH,gCoBzoGG,MAAA,KnBqpGF,iBAAkB,QAClB,aAAc,QmBjpGN,uBnBupGV,uBAHA,uBmBrpGM,uBnBupGN,uBAHA,uBDFC,sCoBnpGK,sCnBupGN,sCmBlpGE,MAAA,KnB0pGA,iBAAkB,QAClB,aAAc,QmBnpGZ,iBpB2oGH,iBoB3oGG,gCnBwpGF,iBAAkB,KmBppGV,yBnBypGV,yBAHA,yBDHC,0BCOD,0BAHA,0BkB3nGA,mCC7BM,mCnBypGN,mCmBnpGI,iBAAA,QACA,aAAA,QD0BJ,iBC1EE,MAAA,QACA,iBAAA,KpBqsGD,aoBlsGC,MAAA,KnB8sGA,iBAAkB,QmB5sGhB,aAAA,QpBssGH,mBoBpsGO,mBAEN,MAAA,KACE,iBAAA,QACA,aAAA,QpBqsGH,mBoBlsGC,MAAA,KnB8sGA,iBAAkB,QAClB,aAAc,QmB1sGR,oBADJ,oBpBqsGH,mCoBlsGG,MAAA,KnB8sGF,iBAAkB,QAClB,aAAc,QmB1sGN,0BnBgtGV,0BAHA,0BmB9sGM,0BnBgtGN,0BAHA,0BDFC,yCoB5sGK,yCnBgtGN,yCmB3sGE,MAAA,KnBmtGA,iBAAkB,QAClB,aAAc,QmB5sGZ,oBpBosGH,oBoBpsGG,mCnBitGF,iBAAkB,KmB7sGV,4BnBktGV,4BAHA,4BDHC,6BCOD,6BAHA,6BkBhrGA,sCCjCM,sCnBktGN,sCmB5sGI,iBAAA,QACA,aAAA,QD8BJ,oBC9EE,MAAA,QACA,iBAAA,KpB8vGD,YoB3vGC,MAAA,KnBuwGA,iBAAkB,QmBrwGhB,aAAA,QpB+vGH,kBoB7vGO,kBAEN,MAAA,KACE,iBAAA,QACA,aAAA,QpB8vGH,kBoB3vGC,MAAA,KnBuwGA,iBAAkB,QAClB,aAAc,QmBnwGR,mBADJ,mBpB8vGH,kCoB3vGG,MAAA,KnBuwGF,iBAAkB,QAClB,aAAc,QmBnwGN,yBnBywGV,yBAHA,yBmBvwGM,yBnBywGN,yBAHA,yBDFC,wCoBrwGK,wCnBywGN,wCmBpwGE,MAAA,KnB4wGA,iBAAkB,QAClB,aAAc,QmBrwGZ,mBpB6vGH,mBoB7vGG,kCnB0wGF,iBAAkB,KmBtwGV,2BnB2wGV,2BAHA,2BDHC,4BCOD,4BAHA,4BkBruGA,qCCrCM,qCnB2wGN,qCmBrwGI,iBAAA,QACA,aAAA,QDuCJ,mBACE,MAAA,QACA,iBAAA,KnB+tGD,UmB5tGC,YAAA,IlBwuGA,MAAO,QACP,cAAe,EAEjB,UGzwGE,iBemCE,iBflCM,oBJkwGT,6BmB7tGC,iBAAA,YlByuGA,mBAAoB,KACZ,WAAY,KkBtuGlB,UAEF,iBAAA,gBnB6tGD,gBmB3tGG,aAAA,YnBiuGH,gBmB/tGG,gBAIA,MAAA,QlBuuGF,gBAAiB,UACjB,iBAAkB,YDNnB,0BmBhuGK,0BAUN,mCATM,mClB2uGJ,MAAO,KmB1yGP,gBAAA,KAGA,mBADA,QpBmyGD,QAAA,KAAA,KmBztGC,UAAW,KlBquGX,YAAa,UmBjzGb,cAAA,IAGA,mBADA,QpB0yGD,QAAA,IAAA,KmB5tGC,UAAW,KlBwuGX,YAAa,ImBxzGb,cAAA,IAGA,mBADA,QpBizGD,QAAA,IAAA,ImB3tGC,UAAW,KACX,YAAA,IACA,cAAA,IAIF,WACE,QAAA,MnB2tGD,MAAA,KCYD,sBACE,WAAY,IqBz3GZ,6BADF,4BtBk3GC,6BI7rGC,MAAA,KAEQ,MJisGT,QAAA,EsBr3GC,mBAAA,QAAA,KAAA,OACE,cAAA,QAAA,KAAA,OtBu3GH,WAAA,QAAA,KAAA,OsBl3GC,StBq3GD,QAAA,EsBn3Ga,UtBs3Gb,QAAA,KsBr3Ga,atBw3Gb,QAAA,MsBv3Ga,etB03Gb,QAAA,UsBt3GC,kBACA,QAAA,gBlBwKA,YACQ,SAAA,SAAA,OAAA,EAOR,SAAA,OACQ,mCAAA,KAAA,8BAAA,KAGR,2BAAA,KACQ,4BAAA,KAAA,uBAAA,KJ2sGT,oBAAA,KuBr5GC,4BAA6B,OAAQ,WACrC,uBAAA,OAAA,WACA,oBAAA,OAAA,WAEA,OACA,QAAA,aACA,MAAA,EACA,OAAA,EACA,YAAA,IACA,eAAA,OvBu5GD,WAAA,IAAA,OuBn5GC,WAAY,IAAI,QtBk6GhB,aAAc,IAAI,MAAM,YsBh6GxB,YAAA,IAAA,MAAA,YAKA,UADF,QvBo5GC,SAAA,SuB94GC,uBACA,QAAA,EAEA,eACA,SAAA,SACA,IAAA,KACA,KAAA,EACA,QAAA,KACA,QAAA,KACA,MAAA,KACA,UAAA,MACA,QAAA,IAAA,EACA,OAAA,IAAA,EAAA,EACA,UAAA,KACA,WAAA,KACA,WAAA,KnBsBA,iBAAA,KACQ,wBAAA,YmBrBR,gBAAA,YtB+5GA,OsB/5GA,IAAA,MAAA,KvBk5GD,OAAA,IAAA,MAAA,gBuB74GC,cAAA,IACE,mBAAA,EAAA,IAAA,KAAA,iBACA,WAAA,EAAA,IAAA,KAAA,iBAzBJ,0BCzBE,MAAA,EACA,KAAA,KAEA,wBxBo8GD,OAAA,IuB96GC,OAAQ,IAAI,EAmCV,SAAA,OACA,iBAAA,QAEA,oBACA,QAAA,MACA,QAAA,IAAA,KACA,MAAA,KvB84GH,YAAA,IuBx4GC,YAAA,WtBw5GA,MAAO,KsBt5GL,YAAA,OvB44GH,0BuB14GG,0BAMF,MAAA,QtBo5GA,gBAAiB,KACjB,iBAAkB,QsBj5GhB,yBAEA,+BADA,+BvBu4GH,MAAA,KuB73GC,gBAAA,KtB64GA,iBAAkB,QAClB,QAAS,EDZV,2BuB33GC,iCAAA,iCAEE,MAAA,KEzGF,iCF2GE,iCAEA,gBAAA,KvB63GH,OAAA,YuBx3GC,iBAAkB,YAGhB,iBAAA,KvBw3GH,OAAA,0DuBn3GG,qBvBs3GH,QAAA,MuB72GC,QACA,QAAA,EAQF,qBACE,MAAA,EACA,KAAA,KAIF,oBACE,MAAA,KACA,KAAA,EAEA,iBACA,QAAA,MACA,QAAA,IAAA,KvBw2GD,UAAA,KuBp2GC,YAAa,WACb,MAAA,KACA,YAAA,OAEA,mBACA,SAAA,MACA,IAAA,EvBs2GD,MAAA,EuBl2GC,OAAQ,EACR,KAAA,EACA,QAAA,IAQF,2BtB42GE,MAAO,EsBx2GL,KAAA,KAEA,eACA,sCvB41GH,QAAA,GuBn2GC,WAAY,EtBm3GZ,cAAe,IAAI,OsBx2GjB,cAAA,IAAA,QAEA,uBvB41GH,8CuBv0GC,IAAK,KAXL,OAAA,KApEA,cAAA,IvB25GC,yBuBv1GD,6BA1DA,MAAA,EACA,KAAA,KvBq5GD,kC0BpiHG,MAAO,KzBojHP,KAAM,GyBhjHR,W1BsiHD,oB0B1iHC,SAAU,SzB0jHV,QAAS,ayBpjHP,eAAA,OAGA,yB1BsiHH,gBCgBC,SAAU,SACV,MAAO,KyB7iHT,gC1BsiHC,gCCYD,+BAFA,+ByBhjHA,uBANM,uBzBujHN,sBAFA,sBAQE,QAAS,EyBljHP,qB1BuiHH,2B0BliHD,2BACE,iC1BoiHD,YAAA,KCgBD,aACE,YAAa,KDZd,kB0B1iHD,wBAAA,0BzB2jHE,MAAO,KDZR,kB0B/hHD,wBACE,0B1BiiHD,YAAA,I0B5hHC,yE1B+hHD,cAAA,E2BhlHC,4BACG,YAAA,EDsDL,mEzB6iHE,wBAAyB,E0B5lHzB,2BAAA,E3BilHD,6C0B5hHD,8CACE,uBAAA,E1B8hHD,0BAAA,E0B3hHC,sB1B8hHD,MAAA,KCgBD,8D0B/mHE,cAAA,E3BomHD,mE0B3hHD,oECjEE,wBAAA,EACG,2BAAA,EDqEL,oEzB0iHE,uBAAwB,EyBxiHxB,0BAAA,EAiBF,mCACE,iCACA,QAAA,EAEF,iCACE,cAAA,IACA,aAAA,IAKF,oCtB/CE,cAAA,KACQ,aAAA,KsBkDR,iCtBnDA,mBAAA,MAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,iBsByDV,0CACE,mBAAA,K1BugHD,WAAA,K0BngHC,YACA,YAAA,EAGF,eACE,aAAA,IAAA,IAAA,E1BqgHD,oBAAA,ECgBD,uBACE,aAAc,EAAE,IAAI,IyB1gHlB,yBACA,+BACA,oC1B+/GH,QAAA,M0BtgHC,MAAO,KAcH,MAAA,K1B2/GL,UAAA,KCgBD,oCACE,MAAO,KyBpgHL,8BACA,oC1By/GH,oC0Bp/GC,0CACE,WAAA,K1Bs/GH,YAAA,E2B/pHC,4DACC,cAAA,EAQA,sD3B4pHF,uBAAA,I0Bt/GC,wBAAA,IC/KA,2BAAA,EACC,0BAAA,EAQA,sD3BkqHF,uBAAA,E0Bv/GC,wBAAyB,EACzB,2BAAA,I1By/GD,0BAAA,ICgBD,uE0BtrHE,cAAA,E3B2qHD,4E0Bt/GD,6EC7LE,2BAAA,EACC,0BAAA,EDoMH,6EACE,uBAAA,EACA,wBAAA,EAEA,qB1Bo/GD,QAAA,M0Bx/GC,MAAO,KzBwgHP,aAAc,MyBjgHZ,gBAAA,SAEA,0B1Bq/GH,gC0B9/GC,QAAS,WAYP,MAAA,K1Bq/GH,MAAA,G0Bj/GG,qC1Bo/GH,MAAA,KCgBD,+CACE,KAAM,KyB7+GF,gDAFA,6C1Bs+GL,2D0Br+GK,wDEzOJ,SAAU,SACV,KAAA,cACA,eAAA,K5BitHD,a4B7sHC,SAAA,SACE,QAAA,MACA,gBAAA,S5BgtHH,0B4BxtHC,MAAO,KAeL,cAAA,EACA,aAAA,EAOA,2BACA,SAAA,S5BusHH,QAAA,E4BrsHG,MAAA,KACE,MAAA,K5BusHL,cAAA,ECgBD,iCACE,QAAS,EiBnrHT,8BACA,mCACA,sCACA,OAAA,KlBwqHD,QAAA,KAAA,KkBtqHC,UAAA,KjBsrHA,YAAa,UACb,cAAe,IiBrrHb,oClB0qHH,yCkBvqHC,4CjBurHA,OAAQ,KACR,YAAa,KDTd,8C4B/sHD,mDAAA,sD3B0tHA,sCACA,2CiBzrHI,8CjB8rHF,OAAQ,KiB1sHR,8BACA,mCACA,sCACA,OAAA,KlB+rHD,QAAA,IAAA,KkB7rHC,UAAA,KjB6sHA,YAAa,IACb,cAAe,IiB5sHb,oClBisHH,yCkB9rHC,4CjB8sHA,OAAQ,KACR,YAAa,KDTd,8C4B7tHD,mDAAA,sD3BwuHA,sCACA,2CiBhtHI,8CjBqtHF,OAAQ,K2BzuHR,2B5B6tHD,mB4B7tHC,iB3B8uHA,QAAS,W2BzuHX,8D5B6tHC,sD4B7tHD,oDAEE,cAAA,EAEA,mB5B+tHD,iB4B1tHC,MAAO,GACP,YAAA,OACA,eAAA,OAEA,mBACA,QAAA,IAAA,KACA,UAAA,KACA,YAAA,IACA,YAAA,EACA,MAAA,K5B4tHD,WAAA,O4BztHC,iBAAA,KACE,OAAA,IAAA,MAAA,KACA,cAAA,I5B4tHH,4B4BztHC,QAAA,IAAA,KACE,UAAA,KACA,cAAA,I5B4tHH,4B4B/uHC,QAAS,KAAK,K3B+vHd,UAAW,K2BruHT,cAAA,IAKJ,wCAAA,qC3BquHE,WAAY,EAEd,uCACA,+BACA,kC0B70HE,6CACG,8CC4GL,6D5BqtHC,wE4BptHC,wBAAA,E5ButHD,2BAAA,ECgBD,+BACE,aAAc,EAEhB,sCACA,8B2BhuHA,+D5BstHC,oDCWD,iC0Bl1HE,4CACG,6CCiHH,uBAAA,E5BwtHD,0BAAA,E4BltHC,8BAGA,YAAA,E5BotHD,iB4BxtHC,SAAU,SAUR,UAAA,E5BitHH,YAAA,O4B/sHK,sB5BktHL,SAAA,SCgBD,2BACE,YAAa,K2BxtHb,6BAAA,4B5B4sHD,4B4BzsHK,QAAA,EAGJ,kCAAA,wCAGI,aAAA,K5B4sHL,iC6B12HD,uCACE,QAAA,EACA,YAAA,K7B62HD,K6B/2HC,aAAc,EAOZ,cAAA,EACA,WAAA,KARJ,QAWM,SAAA,SACA,QAAA,M7B42HL,U6B12HK,SAAA,S5B03HJ,QAAS,M4Bx3HH,QAAA,KAAA,KAMJ,gB7Bu2HH,gB6Bt2HK,gBAAA,K7By2HL,iBAAA,KCgBD,mB4Br3HQ,MAAA,KAGA,yBADA,yB7B02HP,MAAA,K6Bl2HG,gBAAA,K5Bk3HF,OAAQ,YACR,iBAAkB,Y4B/2Hd,aAzCN,mB7B64HC,mBwBh5HC,iBAAA,KACA,aAAA,QAEA,kBxBm5HD,OAAA,I6Bn5HC,OAAQ,IAAI,EA0DV,SAAA,O7B41HH,iBAAA,Q6Bl1HC,c7Bq1HD,UAAA,K6Bn1HG,UAEA,cAAA,IAAA,MAAA,KALJ,aASM,MAAA,KACA,cAAA,KAEA,e7Bo1HL,aAAA,I6Bn1HK,YAAA,WACE,OAAA,IAAA,MAAA,Y7Bq1HP,cAAA,IAAA,IAAA,EAAA,ECgBD,qBACE,aAAc,KAAK,KAAK,K4B51HlB,sBAEA,4BADA,4BAEA,MAAA,K7Bi1HP,OAAA,Q6B50HC,iBAAA,KAqDA,OAAA,IAAA,MAAA,KA8BA,oBAAA,YAnFA,wBAwDE,MAAA,K7B2xHH,cAAA,E6BzxHK,2BACA,MAAA,KA3DJ,6BAgEE,cAAA,IACA,WAAA,OAYJ,iDA0DE,IAAK,KAjED,KAAA,K7B0xHH,yB6BztHD,2BA9DM,QAAA,W7B0xHL,MAAA,G6Bn2HD,6BAuFE,cAAA,GAvFF,6B5Bw3HA,aAAc,EACd,cAAe,IDZhB,kC6BtuHD,wCA3BA,wCATM,OAAA,IAAA,MAAA,K7B+wHH,yB6B3uHD,6B5B2vHE,cAAe,IAAI,MAAM,KACzB,cAAe,IAAI,IAAI,EAAE,EDZ1B,kC6B92HD,wC7B+2HD,wC6B72HG,oBAAA,MAIE,c7B+2HL,MAAA,K6B52HK,gB7B+2HL,cAAA,ICgBD,iBACE,YAAa,I4Bv3HP,uBAQR,6B7Bo2HC,6B6Bl2HG,MAAA,K7Bq2HH,iBAAA,Q6Bn2HK,gBACA,MAAA,KAYN,mBACE,WAAA,I7B41HD,YAAA,E6Bz1HG,e7B41HH,MAAA,K6B11HK,kBACA,MAAA,KAPN,oBAYI,cAAA,IACA,WAAA,OAYJ,wCA0DE,IAAK,KAjED,KAAA,K7B21HH,yB6B1xHD,kBA9DM,QAAA,W7B21HL,MAAA,G6Bl1HD,oBACA,cAAA,GAIE,oBACA,cAAA,EANJ,yB5B02HE,aAAc,EACd,cAAe,IDZhB,8B6B1yHD,oCA3BA,oCATM,OAAA,IAAA,MAAA,K7Bm1HH,yB6B/yHD,yB5B+zHE,cAAe,IAAI,MAAM,KACzB,cAAe,IAAI,IAAI,EAAE,EDZ1B,8B6Bx0HD,oC7By0HD,oC6Bv0HG,oBAAA,MAGA,uB7B00HH,QAAA,K6B/zHC,qBF3OA,QAAA,M3B+iID,yB8BxiIC,WAAY,KACZ,uBAAA,EACA,wBAAA,EAEA,Q9B0iID,SAAA,S8BliIC,WAAY,KA8nBZ,cAAe,KAhoBb,OAAA,IAAA,MAAA,Y9ByiIH,yB8BzhIC,QAgnBE,cAAe,K9B86GlB,yB8BjhIC,eACA,MAAA,MAGA,iBACA,cAAA,KAAA,aAAA,KAEA,WAAA,Q9BkhID,2BAAA,M8BhhIC,WAAA,IAAA,MAAA,YACE,mBAAA,MAAA,EAAA,IAAA,EAAA,qB9BkhIH,WAAA,MAAA,EAAA,IAAA,EAAA,qB8Bz7GD,oBArlBI,WAAA,KAEA,yBAAA,iB9BkhID,MAAA,K8BhhIC,WAAA,EACE,mBAAA,KACA,WAAA,KAEA,0B9BkhIH,QAAA,gB8B/gIC,OAAA,eACE,eAAA,E9BihIH,SAAA,kBCkBD,oBACE,WAAY,QDZf,sC8B/gIK,mC9B8gIH,oC8BzgIC,cAAe,E7B4hIf,aAAc,G6Bj+GlB,sCAnjBE,mC7ByhIA,WAAY,MDdX,4D8BngID,sC9BogID,mCCkBG,WAAY,O6B3gId,kCANE,gC9BsgIH,4B8BvgIG,0BAuiBF,aAAc,M7Bm/Gd,YAAa,MAEf,yBDZC,kC8B3gIK,gC9B0gIH,4B8B3gIG,0BAcF,aAAc,EAChB,YAAA,GAMF,mBA8gBE,QAAS,KAhhBP,aAAA,EAAA,EAAA,I9BkgIH,yB8B7/HC,mB7B+gIE,cAAe,G6B1gIjB,qBADA,kB9BggID,SAAA,M8Bz/HC,MAAO,EAggBP,KAAM,E7B4gHN,QAAS,KDdR,yB8B7/HD,qB9B8/HD,kB8B7/HC,cAAA,GAGF,kBACE,IAAA,EACA,aAAA,EAAA,EAAA,I9BigID,qB8B1/HC,OAAQ,EACR,cAAA,EACA,aAAA,IAAA,EAAA,EAEA,cACA,MAAA,K9B4/HD,OAAA,K8B1/HC,QAAA,KAAA,K7B4gIA,UAAW,K6B1gIT,YAAA,KAIA,oBAbJ,oB9BwgIC,gBAAA,K8Bv/HG,kB7B0gIF,QAAS,MDdR,yBACF,iC8Bh/HC,uCACA,YAAA,OAGA,eC9LA,SAAA,SACA,MAAA,MD+LA,QAAA,IAAA,KACA,WAAA,IACA,aAAA,KACA,cAAA,I9Bm/HD,iBAAA,Y8B/+HC,iBAAA,KACE,OAAA,IAAA,MAAA,Y9Bi/HH,cAAA,I8B5+HG,qBACA,QAAA,EAEA,yB9B++HH,QAAA,M8BrgIC,MAAO,KAyBL,OAAA,I9B++HH,cAAA,I8BpjHD,mCAvbI,WAAA,I9Bg/HH,yB8Bt+HC,eACA,QAAA,MAGE,YACA,OAAA,MAAA,M9By+HH,iB8B58HC,YAAA,KA2YA,eAAgB,KAjaZ,YAAA,KAEA,yBACA,iCACA,SAAA,OACA,MAAA,KACA,MAAA,KAAA,WAAA,E9Bs+HH,iBAAA,Y8B3kHC,OAAQ,E7B8lHR,mBAAoB,K6Bt/HhB,WAAA,KAGA,kDAqZN,sC9BklHC,QAAA,IAAA,KAAA,IAAA,KCmBD,sC6Bv/HQ,YAAA,KAmBR,4C9Bs9HD,4C8BvlHG,iBAAkB,M9B4lHnB,yB8B5lHD,YAtYI,MAAA,K9Bq+HH,OAAA,E8Bn+HK,eACA,MAAA,K9Bu+HP,iB8B39HG,YAAa,KACf,eAAA,MAGA,aACA,QAAA,KAAA,K1B9NA,WAAA,IACQ,aAAA,M2B/DR,cAAA,IACA,YAAA,M/B4vID,WAAA,IAAA,MAAA,YiBtuHC,cAAe,IAAI,MAAM,YAwEzB,mBAAoB,MAAM,EAAE,IAAI,EAAE,qBAAyB,EAAE,IAAI,EAAE,qBAtI/D,WAAA,MAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,IAAA,EAAA,qBAEA,yBjBwyHH,yBiBpqHC,QAAS,aA/HP,cAAA,EACA,eAAA,OjBuyHH,2BiBzqHC,QAAS,aAxHP,MAAA,KjBoyHH,eAAA,OiBhyHG,kCACA,QAAA,aAmHJ,0BhBmsHE,QAAS,aACT,eAAgB,OgB5yHd,wCjB6xHH,6CiBrrHD,2CjBwrHC,MAAA,KiB5xHG,wCACA,MAAA,KAmGJ,4BhB+sHE,cAAe,EgB3yHb,eAAA,OAGA,uBADA,oBjB6xHH,QAAA,aiBnsHC,WAAY,EhBstHZ,cAAe,EgB5yHX,eAAA,OAsFN,6BAAA,0BAjFI,aAAA,EAiFJ,4CjB4sHC,sCiBvxHG,SAAA,SjB0xHH,YAAA,E8BngID,kDAmWE,IAAK,GAvWH,yBACE,yB9B8gIL,cAAA,I8B5/HD,oCAoVE,cAAe,GA1Vf,yBACA,aACA,MAAA,KACA,YAAA,E1BzPF,eAAA,EACQ,aAAA,EJmwIP,YAAA,EACF,OAAA,E8BngIG,mBAAoB,KACtB,WAAA,M9BugID,8B8BngIC,WAAY,EACZ,uBAAA,EHzUA,wBAAA,EAQA,mDACC,cAAA,E3By0IF,uBAAA,I8B//HC,wBAAyB,IChVzB,2BAAA,EACA,0BAAA,EDkVA,YCnVA,WAAA,IACA,cAAA,IDqVA,mBCtVA,WAAA,KACA,cAAA,KD+VF,mBChWE,WAAA,KACA,cAAA,KDuWF,aAsSE,WAAY,KA1SV,cAAA,KAEA,yB9B+/HD,aACF,MAAA,K8Bl+HG,aAAc,KAhBhB,YAAA,MACA,yBE5WA,aF8WE,MAAA,eAFF,cAKI,MAAA,gB9Bu/HH,aAAA,M8B7+HD,4BACA,aAAA,GADF,gBAKI,iBAAA,Q9Bg/HH,aAAA,QCmBD,8B6BhgIM,MAAA,KARN,oC9B0/HC,oC8B5+HG,MAAA,Q9B++HH,iBAAA,Y8B1+HK,6B9B6+HL,MAAA,KCmBD,iC6B5/HQ,MAAA,KAKF,uC9By+HL,uCCmBC,MAAO,KACP,iBAAkB,Y6Bz/HZ,sCAIF,4C9Bu+HL,4CCmBC,MAAO,KACP,iBAAkB,Q6Bv/HZ,wCAxCR,8C9BihIC,8C8Bn+HG,MAAA,K9Bs+HH,iBAAA,YCmBD,+B6Bt/HM,aAAA,KAGA,qCApDN,qC9B2hIC,iBAAA,KCmBD,yC6Bp/HI,iBAAA,KAOE,iCAAA,6B7Bk/HJ,aAAc,Q6B9+HR,oCAiCN,0C9B+7HD,0C8B3xHC,MAAO,KA7LC,iBAAA,QACA,yB7B8+HR,sD6B5+HU,MAAA,KAKF,4D9By9HP,4DCmBC,MAAO,KACP,iBAAkB,Y6Bz+HV,2DAIF,iE9Bu9HP,iECmBC,MAAO,KACP,iBAAkB,Q6Bv+HV,6D9B09HX,mEADE,mE8B1jIC,MAAO,KA8GP,iBAAA,aAEE,6B9Bi9HL,MAAA,K8B58HG,mC9B+8HH,MAAA,KCmBD,0B6B/9HM,MAAA,KAIA,gCAAA,gC7Bg+HJ,MAAO,K6Bt9HT,0CARQ,0CASN,mD9Bu8HD,mD8Bt8HC,MAAA,KAFF,gBAKI,iBAAA,K9B08HH,aAAA,QCmBD,8B6B19HM,MAAA,QARN,oC9Bo9HC,oC8Bt8HG,MAAA,K9By8HH,iBAAA,Y8Bp8HK,6B9Bu8HL,MAAA,QCmBD,iC6Bt9HQ,MAAA,QAKF,uC9Bm8HL,uCCmBC,MAAO,KACP,iBAAkB,Y6Bn9HZ,sCAIF,4C9Bi8HL,4CCmBC,MAAO,KACP,iBAAkB,Q6Bj9HZ,wCAxCR,8C9B2+HC,8C8B57HG,MAAA,K9B+7HH,iBAAA,YCmBD,+B6B/8HM,aAAA,KAGA,qCArDN,qC9Bq/HC,iBAAA,KCmBD,yC6B78HI,iBAAA,KAME,iCAAA,6B7B48HJ,aAAc,Q6Bx8HR,oCAuCN,0C9Bm5HD,0C8B33HC,MAAO,KAvDC,iBAAA,QAuDV,yBApDU,kE9Bs7HP,aAAA,Q8Bn7HO,0D9Bs7HP,iBAAA,QCmBD,sD6Bt8HU,MAAA,QAKF,4D9Bm7HP,4DCmBC,MAAO,KACP,iBAAkB,Y6Bn8HV,2DAIF,iE9Bi7HP,iECmBC,MAAO,KACP,iBAAkB,Q6Bj8HV,6D9Bo7HX,mEADE,mE8B1hIC,MAAO,KA+GP,iBAAA,aAEE,6B9Bg7HL,MAAA,Q8B36HG,mC9B86HH,MAAA,KCmBD,0B6B97HM,MAAA,QAIA,gCAAA,gC7B+7HJ,MAAO,KgCvkJT,0CH0oBQ,0CGzoBN,mDjCwjJD,mDiCvjJC,MAAA,KAEA,YACA,QAAA,IAAA,KjC2jJD,cAAA,KiChkJC,WAAY,KAQV,iBAAA,QjC2jJH,cAAA,IiCxjJK,eACA,QAAA,ajC4jJL,yBiCxkJC,QAAS,EAAE,IAkBT,MAAA,KjCyjJH,QAAA,SkC5kJC,oBACA,MAAA,KAEA,YlC+kJD,QAAA,akCnlJC,aAAc,EAOZ,OAAA,KAAA,ElC+kJH,cAAA,ICmBD,eiC/lJM,QAAA,OAEA,iBACA,oBACA,SAAA,SACA,MAAA,KACA,QAAA,IAAA,KACA,YAAA,KACA,YAAA,WlCglJL,MAAA,QkC9kJG,gBAAA,KjCimJF,iBAAkB,KiC9lJZ,OAAA,IAAA,MAAA,KPVH,6B3B2lJJ,gCkC7kJG,YAAA,EjCgmJF,uBAAwB,I0BvnJxB,0BAAA,I3BymJD,4BkCxkJG,+BjC2lJF,wBAAyB,IACzB,2BAA4B,IiCxlJxB,uBAFA,uBAGA,0BAFA,0BlC8kJL,QAAA,EkCtkJG,MAAA,QjCylJF,iBAAkB,KAClB,aAAc,KAEhB,sBiCvlJM,4BAFA,4BjC0lJN,yBiCvlJM,+BAFA,+BAGA,QAAA,ElC2kJL,MAAA,KkCloJC,OAAQ,QjCqpJR,iBAAkB,QAClB,aAAc,QiCnlJV,wBAEA,8BADA,8BjColJN,2BiCtlJM,iCjCulJN,iCDZC,MAAA,KkC/jJC,OAAQ,YjCklJR,iBAAkB,KkC7pJd,aAAA,KAEA,oBnC8oJL,uBmC5oJG,QAAA,KAAA,KlC+pJF,UAAW,K0B1pJX,YAAA,U3B4oJD,gCmC3oJG,mClC8pJF,uBAAwB,I0BvqJxB,0BAAA,I3BypJD,+BkC1kJD,kCjC6lJE,wBAAyB,IkC7qJrB,2BAAA,IAEA,oBnC8pJL,uBmC5pJG,QAAA,IAAA,KlC+qJF,UAAW,K0B1qJX,YAAA,I3B4pJD,gCmC3pJG,mClC8qJF,uBAAwB,I0BvrJxB,0BAAA,I3ByqJD,+BoC3qJD,kCACE,wBAAA,IACA,2BAAA,IAEA,OpC6qJD,aAAA,EoCjrJC,OAAQ,KAAK,EAOX,WAAA,OpC6qJH,WAAA,KCmBD,UmC7rJM,QAAA,OAEA,YACA,eACA,QAAA,apC8qJL,QAAA,IAAA,KoC5rJC,iBAAkB,KnC+sJlB,OAAQ,IAAI,MAAM,KmC5rJd,cAAA,KAnBN,kBpCisJC,kBCmBC,gBAAiB,KmCzrJb,iBAAA,KA3BN,eAAA,kBAkCM,MAAA,MAlCN,mBAAA,sBnC6tJE,MAAO,KmClrJH,mBAEA,yBADA,yBpCqqJL,sBqCltJC,MAAO,KACP,OAAA,YACA,iBAAA,KAEA,OACA,QAAA,OACA,QAAA,KAAA,KAAA,KACA,UAAA,IACA,YAAA,IACA,YAAA,EACA,MAAA,KrCotJD,WAAA,OqChtJG,YAAA,OpCmuJF,eAAgB,SoCjuJZ,cAAA,MrCotJL,cqCltJK,cAKJ,MAAA,KACE,gBAAA,KrC+sJH,OAAA,QqC1sJG,aACA,QAAA,KAOJ,YCtCE,SAAA,StC+uJD,IAAA,KCmBD,eqC7vJM,iBAAA,KALJ,2BD0CF,2BrC4sJC,iBAAA,QCmBD,eqCpwJM,iBAAA,QALJ,2BD8CF,2BrC+sJC,iBAAA,QCmBD,eqC3wJM,iBAAA,QALJ,2BDkDF,2BrCktJC,iBAAA,QCmBD,YqClxJM,iBAAA,QALJ,wBDsDF,wBrCqtJC,iBAAA,QCmBD,eqCzxJM,iBAAA,QALJ,2BD0DF,2BrCwtJC,iBAAA,QCmBD,cqChyJM,iBAAA,QCDJ,0BADF,0BAEE,iBAAA,QAEA,OACA,QAAA,aACA,UAAA,KACA,QAAA,IAAA,IACA,UAAA,KACA,YAAA,IACA,YAAA,EACA,MAAA,KACA,WAAA,OvCqxJD,YAAA,OuClxJC,eAAA,OACE,iBAAA,KvCoxJH,cAAA,KuC/wJG,aACA,QAAA,KAGF,YtCkyJA,SAAU,SsChyJR,IAAA,KAMA,0BvC4wJH,eCmBC,IAAK,EsC7xJD,QAAA,IAAA,IvCgxJL,cuC9wJK,cAKJ,MAAA,KtC4xJA,gBAAiB,KsC1xJf,OAAA,QvC4wJH,+BuCxwJC,4BACE,MAAA,QvC0wJH,iBAAA,KuCtwJG,wBvCywJH,MAAA,MuCrwJG,+BvCwwJH,aAAA,IwCj0JC,uBACA,YAAA,IAEA,WACA,YAAA,KxCo0JD,eAAA,KwCz0JC,cAAe,KvC41Jf,MAAO,QuCn1JL,iBAAA,KAIA,eAbJ,cAcI,MAAA,QxCo0JH,awCl1JC,cAAe,KAmBb,UAAA,KxCk0JH,YAAA,ICmBD,cuCh1JI,iBAAA,QAEA,sBxCi0JH,4BwC31JC,cAAe,KA8Bb,aAAA,KxCg0JH,cAAA,IwC7yJD,sBAfI,UAAA,KxCi0JD,oCwC9zJC,WvCi1JA,YAAa,KuC/0JX,eAAA,KxCi0JH,sBwCvzJD,4BvC00JE,cAAe,KuC90Jb,aAAA,KC5CJ,ezC42JD,cyC32JC,UAAA,MAGA,WACA,QAAA,MACA,QAAA,IACA,cAAA,KrCiLA,YAAA,WACK,iBAAA,KACG,OAAA,IAAA,MAAA,KJ8rJT,cAAA,IyCx3JC,mBAAoB,OAAO,IAAI,YxC24J1B,cAAe,OAAO,IAAI,YwC93J7B,WAAA,OAAA,IAAA,YAKF,iBzC22JD,eCmBC,aAAc,KACd,YAAa,KwCv3JX,mBA1BJ,kBzCk4JC,kByCv2JG,aAAA,QCzBJ,oBACE,QAAA,IACA,MAAA,KAEA,O1Cs4JD,QAAA,K0C14JC,cAAe,KAQb,OAAA,IAAA,MAAA,YAEA,cAAA,IAVJ,UAeI,WAAA,E1Ck4JH,MAAA,QCmBD,mByC/4JI,YAAA,IArBJ,SAyBI,U1C+3JH,cAAA,ECmBD,WyCx4JE,WAAA,IAFF,mBAAA,mBAMI,cAAA,KAEA,0BACA,0B1Cy3JH,SAAA,S0Cj3JC,IAAK,KCvDL,MAAA,MACA,MAAA,Q3C46JD,e0Ct3JC,MAAO,QClDL,iBAAA,Q3C26JH,aAAA,Q2Cx6JG,kB3C26JH,iBAAA,Q2Cn7JC,2BACA,MAAA,Q3Cu7JD,Y0C73JC,MAAO,QCtDL,iBAAA,Q3Cs7JH,aAAA,Q2Cn7JG,e3Cs7JH,iBAAA,Q2C97JC,wBACA,MAAA,Q3Ck8JD,e0Cp4JC,MAAO,QC1DL,iBAAA,Q3Ci8JH,aAAA,Q2C97JG,kB3Ci8JH,iBAAA,Q2Cz8JC,2BACA,MAAA,Q3C68JD,c0C34JC,MAAO,QC9DL,iBAAA,Q3C48JH,aAAA,Q2Cz8JG,iB3C48JH,iBAAA,Q4C78JC,0BAAQ,MAAA,QACR,wCAAQ,K5Cm9JP,oBAAA,KAAA,E4C/8JD,GACA,oBAAA,EAAA,GACA,mCAAQ,K5Cq9JP,oBAAA,KAAA,E4Cv9JD,GACA,oBAAA,EAAA,GACA,gCAAQ,K5Cq9JP,oBAAA,KAAA,E4C78JD,GACA,oBAAA,EAAA,GAGA,UACA,OAAA,KxCsCA,cAAA,KACQ,SAAA,OJ26JT,iBAAA,Q4C78JC,cAAe,IACf,mBAAA,MAAA,EAAA,IAAA,IAAA,eACA,WAAA,MAAA,EAAA,IAAA,IAAA,eAEA,cACA,MAAA,KACA,MAAA,EACA,OAAA,KACA,UAAA,KxCyBA,YAAA,KACQ,MAAA,KAyHR,WAAA,OACK,iBAAA,QACG,mBAAA,MAAA,EAAA,KAAA,EAAA,gBJ+zJT,WAAA,MAAA,EAAA,KAAA,EAAA,gB4C18JC,mBAAoB,MAAM,IAAI,K3Cq+JzB,cAAe,MAAM,IAAI,K4Cp+J5B,WAAA,MAAA,IAAA,KDEF,sBCAE,gCDAF,iBAAA,yK5C88JD,iBAAA,oK4Cv8JC,iBAAiB,iK3Cm+JjB,wBAAyB,KAAK,KG/gK9B,gBAAA,KAAA,KJy/JD,qBIv/JS,+BwCmDR,kBAAmB,qBAAqB,GAAG,OAAO,SErElD,aAAA,qBAAA,GAAA,OAAA,S9C4gKD,UAAA,qBAAA,GAAA,OAAA,S6Cz9JG,sBACA,iBAAA,Q7C69JH,wC4Cx8JC,iBAAkB,yKEzElB,iBAAA,oK9CohKD,iBAAA,iK6Cj+JG,mBACA,iBAAA,Q7Cq+JH,qC4C58JC,iBAAkB,yKE7ElB,iBAAA,oK9C4hKD,iBAAA,iK6Cz+JG,sBACA,iBAAA,Q7C6+JH,wC4Ch9JC,iBAAkB,yKEjFlB,iBAAA,oK9CoiKD,iBAAA,iK6Cj/JG,qBACA,iBAAA,Q7Cq/JH,uC+C5iKC,iBAAkB,yKAElB,iBAAA,oK/C6iKD,iBAAA,iK+C1iKG,O/C6iKH,WAAA,KC4BD,mB8CnkKE,WAAA,E/C4iKD,O+CxiKD,YACE,SAAA,O/C0iKD,KAAA,E+CtiKC,Y/CyiKD,MAAA,Q+CriKG,c/CwiKH,QAAA,MC4BD,4B8C9jKE,UAAA,KAGF,aAAA,mBAEE,aAAA,KAGF,YAAA,kB9C+jKE,cAAe,K8CxjKjB,YAHE,Y/CoiKD,a+ChiKC,QAAA,W/CmiKD,eAAA,I+C/hKC,c/CkiKD,eAAA,O+C7hKC,cACA,eAAA,OAMF,eACE,WAAA,EACA,cAAA,ICvDF,YAEE,aAAA,EACA,WAAA,KAQF,YACE,aAAA,EACA,cAAA,KAGA,iBACA,SAAA,SACA,QAAA,MhD6kKD,QAAA,KAAA,KgD1kKC,cAAA,KrB3BA,iBAAA,KACC,OAAA,IAAA,MAAA,KqB6BD,6BACE,uBAAA,IrBvBF,wBAAA,I3BsmKD,4BgDpkKC,cAAe,E/CgmKf,2BAA4B,I+C9lK5B,0BAAA,IAFF,kBAAA,uBAKI,MAAA,KAIF,2CAAA,gD/CgmKA,MAAO,K+C5lKL,wBAFA,wBhDykKH,6BgDxkKG,6BAKF,MAAO,KACP,gBAAA,KACA,iBAAA,QAKA,uB/C4lKA,MAAO,KACP,WAAY,K+CzlKV,0BhDmkKH,gCgDlkKG,gCALF,MAAA,K/CmmKA,OAAQ,YACR,iBAAkB,KDxBnB,mDgD5kKC,yDAAA,yD/CymKA,MAAO,QDxBR,gDgDhkKC,sDAAA,sD/C6lKA,MAAO,K+CzlKL,wBAEA,8BADA,8BhDmkKH,QAAA,EgDxkKC,MAAA,K/ComKA,iBAAkB,QAClB,aAAc,QAEhB,iDDpBC,wDCuBD,uDADA,uD+CzmKE,8DAYI,6D/C4lKN,uD+CxmKE,8D/C2mKF,6DAKE,MAAO,QDxBR,8CiD1qKG,oDADF,oDAEE,MAAA,QAEA,yBhDusKF,MAAO,QgDrsKH,iBAAA,QAFF,0BAAA,+BAKI,MAAA,QAGF,mDAAA,wDhDwsKJ,MAAO,QDtBR,gCiDhrKO,gCAGF,qCAFE,qChD2sKN,MAAO,QACP,iBAAkB,QAEpB,iCgDvsKQ,uCAFA,uChD0sKR,sCDtBC,4CiDnrKO,4CArBN,MAAA,KACE,iBAAA,QACA,aAAA,QAEA,sBhDouKF,MAAO,QgDluKH,iBAAA,QAFF,uBAAA,4BAKI,MAAA,QAGF,gDAAA,qDhDquKJ,MAAO,QDtBR,6BiD7sKO,6BAGF,kCAFE,kChDwuKN,MAAO,QACP,iBAAkB,QAEpB,8BgDpuKQ,oCAFA,oChDuuKR,mCDtBC,yCiDhtKO,yCArBN,MAAA,KACE,iBAAA,QACA,aAAA,QAEA,yBhDiwKF,MAAO,QgD/vKH,iBAAA,QAFF,0BAAA,+BAKI,MAAA,QAGF,mDAAA,wDhDkwKJ,MAAO,QDtBR,gCiD1uKO,gCAGF,qCAFE,qChDqwKN,MAAO,QACP,iBAAkB,QAEpB,iCgDjwKQ,uCAFA,uChDowKR,sCDtBC,4CiD7uKO,4CArBN,MAAA,KACE,iBAAA,QACA,aAAA,QAEA,wBhD8xKF,MAAO,QgD5xKH,iBAAA,QAFF,yBAAA,8BAKI,MAAA,QAGF,kDAAA,uDhD+xKJ,MAAO,QDtBR,+BiDvwKO,+BAGF,oCAFE,oChDkyKN,MAAO,QACP,iBAAkB,QAEpB,gCgD9xKQ,sCAFA,sChDiyKR,qCDtBC,2CiD1wKO,2CDkGN,MAAO,KACP,iBAAA,QACA,aAAA,QAEF,yBACE,WAAA,EACA,cAAA,IE1HF,sBACE,cAAA,EACA,YAAA,IAEA,O9C0DA,cAAA,KACQ,iBAAA,KJ6uKT,OAAA,IAAA,MAAA,YkDnyKC,cAAe,IACf,mBAAA,EAAA,IAAA,IAAA,gBlDqyKD,WAAA,EAAA,IAAA,IAAA,gBkD/xKC,YACA,QAAA,KvBnBC,e3BuzKF,QAAA,KAAA,KkDtyKC,cAAe,IAAI,MAAM,YAMvB,uBAAA,IlDmyKH,wBAAA,IkD7xKC,0CACA,MAAA,QAEA,alDgyKD,WAAA,EkDpyKC,cAAe,EjDg0Kf,UAAW,KACX,MAAO,QDtBR,oBkD1xKC,sBjDkzKF,eiDxzKI,mBAKJ,qBAEE,MAAA,QvBvCA,cACC,QAAA,KAAA,K3Bs0KF,iBAAA,QkDrxKC,WAAY,IAAI,MAAM,KjDizKtB,2BAA4B,IiD9yK1B,0BAAA,IAHJ,mBAAA,mCAMM,cAAA,ElDwxKL,oCkDnxKG,oDjD+yKF,aAAc,IAAI,EiD7yKZ,cAAA,EvBtEL,4D3B61KF,4EkDjxKG,WAAA,EjD6yKF,uBAAwB,IiD3yKlB,wBAAA,IvBtEL,0D3B21KF,0EkD1yKC,cAAe,EvB1Df,2BAAA,IACC,0BAAA,IuB0FH,+EAEI,uBAAA,ElD8wKH,wBAAA,EkD1wKC,wDlD6wKD,iBAAA,EC4BD,0BACE,iBAAkB,EiDlyKpB,8BlD0wKC,ckD1wKD,gCjDuyKE,cAAe,EiDvyKjB,sCAQM,sBlDwwKL,wCC4BC,cAAe,K0Br5Kf,aAAA,KuByGF,wDlDqxKC,0BC4BC,uBAAwB,IACxB,wBAAyB,IiDlzK3B,yFAoBQ,yFlDwwKP,2DkDzwKO,2DjDqyKN,uBAAwB,IACxB,wBAAyB,IAK3B,wGiD9zKA,wGjD4zKA,wGDtBC,wGCuBD,0EiD7zKA,0EjD2zKA,0EiDnyKU,0EjD2yKR,uBAAwB,IAK1B,uGiDx0KA,uGjDs0KA,uGDtBC,uGCuBD,yEiDv0KA,yEjDq0KA,yEiDzyKU,yEvB7HR,wBAAA,IuBiGF,sDlDqzKC,yBC4BC,2BAA4B,IAC5B,0BAA2B,IiDxyKrB,qFA1CR,qFAyCQ,wDlDmxKP,wDC4BC,2BAA4B,IAC5B,0BAA2B,IAG7B,oGDtBC,oGCwBD,oGiD91KA,oGjD21KA,uEiD7yKU,uEjD+yKV,uEiD71KA,uEjDm2KE,0BAA2B,IAG7B,mGDtBC,mGCwBD,mGiDx2KA,mGjDq2KA,sEiDnzKU,sEjDqzKV,sEiDv2KA,sEjD62KE,2BAA4B,IiDlzK1B,0BlD2xKH,qCkDt1KD,0BAAA,qCA+DI,WAAA,IAAA,MAAA,KA/DJ,kDAAA,kDAmEI,WAAA,EAnEJ,uBAAA,yCjD23KE,OAAQ,EiDjzKA,+CjDqzKV,+CiD/3KA,+CjDi4KA,+CAEA,+CANA,+CDjBC,iECoBD,iEiDh4KA,iEjDk4KA,iEAEA,iEANA,iEAWE,YAAa,EiD3zKL,8CjD+zKV,8CiD74KA,8CjD+4KA,8CAEA,8CANA,8CDjBC,gECoBD,gEiD94KA,gEjDg5KA,gEAEA,gEANA,gEAWE,aAAc,EAIhB,+CiD35KA,+CjDy5KA,+CiDl0KU,+CjDq0KV,iEiD55KA,iEjD05KA,iEDtBC,iEC6BC,cAAe,EAEjB,8CiDn0KU,8CjDq0KV,8CiDr6KA,8CjDo6KA,gEDtBC,gECwBD,gEiDh0KI,gEACA,cAAA,EAUJ,yBACE,cAAA,ElDmyKD,OAAA,EkD/xKG,aACA,cAAA,KANJ,oBASM,cAAA,ElDkyKL,cAAA,IkD7xKG,2BlDgyKH,WAAA,IC4BD,4BiDxzKM,cAAA,EAKF,wDAvBJ,wDlDqzKC,WAAA,IAAA,MAAA,KkD5xKK,2BlD+xKL,WAAA,EmDlhLC,uDnDqhLD,cAAA,IAAA,MAAA,KmDlhLG,eACA,aAAA,KnDshLH,8BmDxhLC,MAAA,KAMI,iBAAA,QnDqhLL,aAAA,KmDlhLK,0DACA,iBAAA,KAGJ,qCAEI,MAAA,QnDmhLL,iBAAA,KmDpiLC,yDnDuiLD,oBAAA,KmDpiLG,eACA,aAAA,QnDwiLH,8BmD1iLC,MAAA,KAMI,iBAAA,QnDuiLL,aAAA,QmDpiLK,0DACA,iBAAA,QAGJ,qCAEI,MAAA,QnDqiLL,iBAAA,KmDtjLC,yDnDyjLD,oBAAA,QmDtjLG,eACA,aAAA,QnD0jLH,8BmD5jLC,MAAA,QAMI,iBAAA,QnDyjLL,aAAA,QmDtjLK,0DACA,iBAAA,QAGJ,qCAEI,MAAA,QnDujLL,iBAAA,QmDxkLC,yDnD2kLD,oBAAA,QmDxkLG,YACA,aAAA,QnD4kLH,2BmD9kLC,MAAA,QAMI,iBAAA,QnD2kLL,aAAA,QmDxkLK,uDACA,iBAAA,QAGJ,kCAEI,MAAA,QnDykLL,iBAAA,QmD1lLC,sDnD6lLD,oBAAA,QmD1lLG,eACA,aAAA,QnD8lLH,8BmDhmLC,MAAA,QAMI,iBAAA,QnD6lLL,aAAA,QmD1lLK,0DACA,iBAAA,QAGJ,qCAEI,MAAA,QnD2lLL,iBAAA,QmD5mLC,yDnD+mLD,oBAAA,QmD5mLG,cACA,aAAA,QnDgnLH,6BmDlnLC,MAAA,QAMI,iBAAA,QnD+mLL,aAAA,QmD5mLK,yDACA,iBAAA,QAGJ,oCAEI,MAAA,QnD6mLL,iBAAA,QoD5nLC,wDACA,oBAAA,QAEA,kBACA,SAAA,SpD+nLD,QAAA,MoDpoLC,OAAQ,EnDgqLR,QAAS,EACT,SAAU,OAEZ,yCmDtpLI,wBADA,yBAEA,yBACA,wBACA,SAAA,SACA,IAAA,EACA,OAAA,EpD+nLH,KAAA,EoD1nLC,MAAO,KACP,OAAA,KpD4nLD,OAAA,EoDvnLC,wBpD0nLD,eAAA,OqDppLC,uBACA,eAAA,IAEA,MACA,WAAA,KACA,QAAA,KjDwDA,cAAA,KACQ,iBAAA,QJgmLT,OAAA,IAAA,MAAA,QqD/pLC,cAAe,IASb,mBAAA,MAAA,EAAA,IAAA,IAAA,gBACA,WAAA,MAAA,EAAA,IAAA,IAAA,gBAKJ,iBACE,aAAA,KACA,aAAA,gBAEF,SACE,QAAA,KACA,cAAA,ICtBF,SACE,QAAA,IACA,cAAA,IAEA,OACA,MAAA,MACA,UAAA,KjCRA,YAAA,IAGA,YAAA,ErBqrLD,MAAA,KsD7qLC,YAAA,EAAA,IAAA,EAAA,KrDysLA,OAAQ,kBqDvsLN,QAAA,GjCbF,aiCeE,ajCZF,MAAA,KrB6rLD,gBAAA,KsDzqLC,OAAA,QACE,OAAA,kBACA,QAAA,GAEA,aACA,mBAAA,KtD2qLH,QAAA,EuDhsLC,OAAQ,QACR,WAAA,IvDksLD,OAAA,EuD7rLC,YACA,SAAA,OAEA,OACA,SAAA,MACA,IAAA,EACA,MAAA,EACA,OAAA,EACA,KAAA,EAIA,QAAA,KvD6rLD,QAAA,KuD1rLC,SAAA,OnD+GA,2BAAA,MACI,QAAA,EAEI,0BAkER,mBAAA,kBAAA,IAAA,SAEK,cAAA,aAAA,IAAA,SACG,WAAA,UAAA,IAAA,SJ6gLT,kBAAA,kBuDhsLC,cAAA,kBnD2GA,aAAA,kBACI,UAAA,kBAEI,wBJwlLT,kBAAA,euDpsLK,cAAe,eACnB,aAAA,eACA,UAAA,eAIF,mBACE,WAAA,OACA,WAAA,KvDqsLD,cuDhsLC,SAAU,SACV,MAAA,KACA,OAAA,KAEA,eACA,SAAA,SnDaA,iBAAA,KACQ,wBAAA,YmDZR,gBAAA,YtD4tLA,OsD5tLA,IAAA,MAAA,KAEA,OAAA,IAAA,MAAA,evDksLD,cAAA,IuD9rLC,QAAS,EACT,mBAAA,EAAA,IAAA,IAAA,eACA,WAAA,EAAA,IAAA,IAAA,eAEA,gBACA,SAAA,MACA,IAAA,EACA,MAAA,EvDgsLD,OAAA,EuD9rLC,KAAA,ElCrEA,QAAA,KAGA,iBAAA,KkCmEA,qBlCtEA,OAAA,iBAGA,QAAA,EkCwEF,mBACE,OAAA,kBACA,QAAA,GAIF,cACE,QAAA,KvDgsLD,cAAA,IAAA,MAAA,QuD3rLC,qBACA,WAAA,KAKF,aACE,OAAA,EACA,YAAA,WAIF,YACE,SAAA,SACA,QAAA,KvD0rLD,cuD5rLC,QAAS,KAQP,WAAA,MACA,WAAA,IAAA,MAAA,QATJ,wBAaI,cAAA,EvDsrLH,YAAA,IuDlrLG,mCvDqrLH,YAAA,KuD/qLC,oCACA,YAAA,EAEA,yBACA,SAAA,SvDkrLD,IAAA,QuDhqLC,MAAO,KAZP,OAAA,KACE,SAAA,OvDgrLD,yBuD7qLD,cnDvEA,MAAA,MACQ,OAAA,KAAA,KmD2ER,eAAY,mBAAA,EAAA,IAAA,KAAA,evD+qLX,WAAA,EAAA,IAAA,KAAA,euDzqLD,UAFA,MAAA,OvDirLD,yBwD/zLC,UACA,MAAA,OCNA,SAEA,SAAA,SACA,QAAA,KACA,QAAA,MACA,YAAA,iBAAA,UAAA,MAAA,WACA,UAAA,KACA,WAAA,OACA,YAAA,IACA,YAAA,WACA,WAAA,KACA,WAAA,MACA,gBAAA,KACA,YAAA,KACA,eAAA,KACA,eAAA,ODHA,WAAA,OnCVA,aAAA,OAGA,UAAA,OrBs1LD,YAAA,OwD30LC,OAAA,iBnCdA,QAAA,ErB61LD,WAAA,KwD90LY,YAAmB,OAAA,kBxDk1L/B,QAAA,GwDj1LY,aAAmB,QAAA,IAAA,ExDq1L/B,WAAA,KwDp1LY,eAAmB,QAAA,EAAA,IxDw1L/B,YAAA,IwDv1LY,gBAAmB,QAAA,IAAA,ExD21L/B,WAAA,IwDt1LC,cACA,QAAA,EAAA,IACA,YAAA,KAEA,eACA,UAAA,MxDy1LD,QAAA,IAAA,IwDr1LC,MAAO,KACP,WAAA,OACA,iBAAA,KACA,cAAA,IAEA,exDu1LD,SAAA,SwDn1LC,MAAA,EACE,OAAA,EACA,aAAA,YACA,aAAA,MAEA,4BxDq1LH,OAAA,EwDn1LC,KAAA,IACE,YAAA,KACA,aAAA,IAAA,IAAA,EACA,iBAAA,KAEA,iCxDq1LH,MAAA,IwDn1LC,OAAA,EACE,cAAA,KACA,aAAA,IAAA,IAAA,EACA,iBAAA,KAEA,kCxDq1LH,OAAA,EwDn1LC,KAAA,IACE,cAAA,KACA,aAAA,IAAA,IAAA,EACA,iBAAA,KAEA,8BxDq1LH,IAAA,IwDn1LC,KAAA,EACE,WAAA,KACA,aAAA,IAAA,IAAA,IAAA,EACA,mBAAA,KAEA,6BxDq1LH,IAAA,IwDn1LC,MAAA,EACE,WAAA,KACA,aAAA,IAAA,EAAA,IAAA,IACA,kBAAA,KAEA,+BxDq1LH,IAAA,EwDn1LC,KAAA,IACE,YAAA,KACA,aAAA,EAAA,IAAA,IACA,oBAAA,KAEA,oCxDq1LH,IAAA,EwDn1LC,MAAA,IACE,WAAA,KACA,aAAA,EAAA,IAAA,IACA,oBAAA,KAEA,qCxDq1LH,IAAA,E0Dl7LC,KAAM,IACN,WAAA,KACA,aAAA,EAAA,IAAA,IACA,oBAAA,KAEA,SACA,SAAA,SACA,IAAA,EDXA,KAAA,EAEA,QAAA,KACA,QAAA,KACA,UAAA,MACA,QAAA,IACA,YAAA,iBAAA,UAAA,MAAA,WACA,UAAA,KACA,WAAA,OACA,YAAA,IACA,YAAA,WACA,WAAA,KACA,WAAA,MACA,gBAAA,KACA,YAAA,KACA,eAAA,KCAA,eAAA,OAEA,WAAA,OACA,aAAA,OAAA,UAAA,OACA,YAAA,OACA,iBAAA,KACA,wBAAA,YtD8CA,gBAAA,YACQ,OAAA,IAAA,MAAA,KJk5LT,OAAA,IAAA,MAAA,e0D77LC,cAAA,IAAY,mBAAA,EAAA,IAAA,KAAA,e1Dg8Lb,WAAA,EAAA,IAAA,KAAA,e0D/7La,WAAA,KACZ,aAAY,WAAA,MACZ,eAAY,YAAA,KAGd,gBACE,WAAA,KAEA,cACA,YAAA,MAEA,e1Dq8LD,QAAA,IAAA,K0Dl8LC,OAAQ,EACR,UAAA,K1Do8LD,iBAAA,Q0D57LC,cAAA,IAAA,MAAA,QzDy9LA,cAAe,IAAI,IAAI,EAAE,EyDt9LvB,iBACA,QAAA,IAAA,KAEA,gBACA,sB1D87LH,SAAA,S0D37LC,QAAS,MACT,MAAA,E1D67LD,OAAA,E0D37LC,aAAc,YACd,aAAA,M1D87LD,gB0Dz7LC,aAAA,KAEE,sBACA,QAAA,GACA,aAAA,KAEA,oB1D27LH,OAAA,M0D17LG,KAAA,IACE,YAAA,MACA,iBAAA,KACA,iBAAA,gBACA,oBAAA,E1D67LL,0B0Dz7LC,OAAA,IACE,YAAA,MACA,QAAA,IACA,iBAAA,KACA,oBAAA,EAEA,sB1D27LH,IAAA,I0D17LG,KAAA,MACE,WAAA,MACA,mBAAA,KACA,mBAAA,gBACA,kBAAA,E1D67LL,4B0Dz7LC,OAAA,MACE,KAAA,IACA,QAAA,IACA,mBAAA,KACA,kBAAA,EAEA,uB1D27LH,IAAA,M0D17LG,KAAA,IACE,YAAA,MACA,iBAAA,EACA,oBAAA,KACA,oBAAA,gB1D67LL,6B0Dx7LC,IAAA,IACE,YAAA,MACA,QAAA,IACA,iBAAA,EACA,oBAAA,KAEA,qB1D07LH,IAAA,I0Dz7LG,MAAA,MACE,WAAA,MACA,mBAAA,EACA,kBAAA,KACA,kBAAA,gB1D47LL,2B2DpjMC,MAAO,IACP,OAAA,M3DsjMD,QAAA,I2DnjMC,mBAAoB,EACpB,kBAAA,KAEA,U3DqjMD,SAAA,S2DljMG,gBACA,SAAA,SvD6KF,MAAA,KACK,SAAA,OJ04LN,sB2D/jMC,SAAU,S1D4lMV,QAAS,K0D9kML,mBAAA,IAAA,YAAA,K3DqjML,cAAA,IAAA,YAAA,K2D3hMC,WAAA,IAAA,YAAA,KvDmKK,4BAFL,0BAGQ,YAAA,EA3JA,qDA+GR,sBAEQ,mBAAA,kBAAA,IAAA,YJ86LP,cAAA,aAAA,IAAA,Y2DzjMG,WAAA,UAAA,IAAA,YvDmHJ,4BAAA,OACQ,oBAAA,OuDjHF,oBAAA,O3D4jML,YAAA,OI58LD,mCHs+LA,2BGr+LQ,KAAA,EuD5GF,kBAAA,sB3D6jML,UAAA,sBC2BD,kCADA,2BG5+LA,KAAA,EACQ,kBAAA,uBuDtGF,UAAA,uBArCN,6B3DomMD,gC2DpmMC,iC1D+nME,KAAM,E0DllMN,kBAAA,mB3D4jMH,UAAA,oBAGA,wB2D5mMD,sBAAA,sBAsDI,QAAA,MAEA,wB3D0jMH,KAAA,E2DtjMG,sB3DyjMH,sB2DrnMC,SAAU,SA+DR,IAAA,E3DyjMH,MAAA,KC0BD,sB0D/kMI,KAAA,KAnEJ,sBAuEI,KAAA,MAvEJ,2BA0EI,4B3DwjMH,KAAA,E2D/iMC,6BACA,KAAA,MAEA,8BACA,KAAA,KtC3FA,kBsC6FA,SAAA,SACA,IAAA,EACA,OAAA,EACA,KAAA,EACA,MAAA,I3DmjMD,UAAA,K2D9iMC,MAAA,KdnGE,WAAA,OACA,YAAA,EAAA,IAAA,IAAA,eACA,iBAAA,cAAA,OAAA,kBACA,QAAA,G7CqpMH,uB2DljMC,iBAAA,sEACE,iBAAA,iEACA,iBAAA,uFdxGA,iBAAA,kEACA,OAAA,+GACA,kBAAA,SACA,wBACA,MAAA,E7C6pMH,KAAA,K2DpjMC,iBAAA,sE1DglMA,iBAAiB,iE0D9kMf,iBAAA,uFACA,iBAAA,kEACA,OAAA,+GtCvHF,kBAAA,SsCyFF,wB3DslMC,wBC4BC,MAAO,KACP,gBAAiB,KACjB,OAAQ,kB0D7kMN,QAAA,EACA,QAAA,G3DwjMH,0C2DhmMD,2CA2CI,6BADA,6B1DklMF,SAAU,S0D7kMR,IAAA,IACA,QAAA,E3DqjMH,QAAA,a2DrmMC,WAAY,MAqDV,0CADA,6B3DsjMH,KAAA,I2D1mMC,YAAa,MA0DX,2CADA,6BAEA,MAAA,IACA,aAAA,MAME,6BADF,6B3DmjMH,MAAA,K2D9iMG,OAAA,KACE,YAAA,M3DgjML,YAAA,E2DriMC,oCACA,QAAA,QAEA,oCACA,QAAA,QAEA,qBACA,SAAA,SACA,OAAA,K3DwiMD,KAAA,I2DjjMC,QAAS,GAYP,MAAA,IACA,aAAA,EACA,YAAA,KACA,WAAA,OACA,WAAA,KAEA,wBACA,QAAA,aAWA,MAAA,KACA,OAAA,K3D8hMH,OAAA,I2D7jMC,YAAa,OAkCX,OAAA,QACA,iBAAA,OACA,iBAAA,cACA,OAAA,IAAA,MAAA,K3D8hMH,cAAA,K2DthMC,6BACA,MAAA,KACA,OAAA,KACA,OAAA,EACA,iBAAA,KAEA,kBACA,SAAA,SACA,MAAA,IACA,OAAA,K3DyhMD,KAAA,I2DxhMC,QAAA,GACE,YAAA,K3D0hMH,eAAA,K2Dj/LC,MAAO,KAhCP,WAAA,O1D8iMA,YAAa,EAAE,IAAI,IAAI,eAEzB,uB0D3iMM,YAAA,KAEA,oCACA,0C3DmhMH,2C2D3hMD,6BAAA,6BAYI,MAAA,K3DmhMH,OAAA,K2D/hMD,WAAA,M1D2jME,UAAW,KDxBZ,0C2D9gMD,6BACE,YAAA,MAEA,2C3DghMD,6B2D5gMD,aAAA,M3D+gMC,kBACF,MAAA,I4D7wMC,KAAA,I3DyyME,eAAgB,KAElB,qBACE,OAAQ,MAkBZ,qCADA,sCADA,mBADA,oBAXA,gBADA,iBAOA,uBADA,wBADA,iBADA,kBADA,wBADA,yBASA,mCADA,oC2DpzME,oBAAA,qBAAA,oBAAA,qB3D2zMF,WADA,YAOA,uBADA,wBADA,qBADA,sBADA,cADA,e2D/zMI,a3Dq0MJ,cDvBC,kB4D7yMG,mB3DqzMJ,WADA,YAwBE,QAAS,MACT,QAAS,IASX,qCADA,mBANA,gBAGA,uBADA,iBADA,wBAIA,mCDhBC,oB6D/0MC,oB5Dk2MF,W+B51MA,uBhCo0MC,qB4D5zMG,cChBF,aACA,kB5D+1MF,W+Br1ME,MAAO,KhCy0MR,cgCt0MC,QAAS,MACT,aAAA,KhCw0MD,YAAA,KgC/zMC,YhCk0MD,MAAA,gBgC/zMC,WhCk0MD,MAAA,egC/zMC,MhCk0MD,QAAA,e8Dz1MC,MACA,QAAA,gBAEA,WACA,WAAA,O9B8BF,WACE,KAAA,EAAA,EAAA,EhCg0MD,MAAA,YgCzzMC,YAAa,KACb,iBAAA,YhC2zMD,OAAA,E+D31MC,Q/D81MD,QAAA,eC4BD,OACE,SAAU,M+Dn4MV,chE42MD,MAAA,aC+BD,YADA,YADA,YADA,YAIE,QAAS,e+Dp5MT,kBhEs4MC,mBgEr4MD,yBhEi4MD,kB+Dl1MD,mBA6IA,yB9D4tMA,kBACA,mB8Dj3ME,yB9D62MF,kBACA,mBACA,yB+Dv5MY,QAAA,eACV,yBAAU,YhE04MT,QAAA,gBC4BD,iB+Dp6MU,QAAA,gBhE64MX,c+D51MG,QAAS,oB/Dg2MV,c+Dl2MC,c/Dm2MH,QAAA,sB+D91MG,yB/Dk2MD,kBACF,QAAA,iB+D91MG,yB/Dk2MD,mBACF,QAAA,kBgEh6MC,yBhEo6MC,yBgEn6MD,QAAA,wBACA,+CAAU,YhEw6MT,QAAA,gBC4BD,iB+Dl8MU,QAAA,gBhE26MX,c+Dr2MG,QAAS,oB/Dy2MV,c+D32MC,c/D42MH,QAAA,sB+Dv2MG,+C/D22MD,kBACF,QAAA,iB+Dv2MG,+C/D22MD,mBACF,QAAA,kBgE97MC,+ChEk8MC,yBgEj8MD,QAAA,wBACA,gDAAU,YhEs8MT,QAAA,gBC4BD,iB+Dh+MU,QAAA,gBhEy8MX,c+D92MG,QAAS,oB/Dk3MV,c+Dp3MC,c/Dq3MH,QAAA,sB+Dh3MG,gD/Do3MD,kBACF,QAAA,iB+Dh3MG,gD/Do3MD,mBACF,QAAA,kBgE59MC,gDhEg+MC,yBgE/9MD,QAAA,wBACA,0BAAU,YhEo+MT,QAAA,gBC4BD,iB+D9/MU,QAAA,gBhEu+MX,c+Dv3MG,QAAS,oB/D23MV,c+D73MC,c/D83MH,QAAA,sB+Dz3MG,0B/D63MD,kBACF,QAAA,iB+Dz3MG,0B/D63MD,mBACF,QAAA,kBgEl/MC,0BhEs/MC,yBACF,QAAA,wBgEv/MC,yBhE2/MC,WACF,QAAA,gBgE5/MC,+ChEggNC,WACF,QAAA,gBgEjgNC,gDhEqgNC,WACF,QAAA,gBAGA,0B+Dh3MC,WA4BE,QAAS,gBC5LX,eAAU,QAAA,eACV,aAAU,ehEyhNT,QAAA,gBC4BD,oB+DnjNU,QAAA,gBhE4hNX,iB+D93MG,QAAS,oBAMX,iB/D23MD,iB+Dt2MG,QAAS,sB/D22MZ,qB+D/3MC,QAAS,e/Dk4MV,a+D53MC,qBAcE,QAAS,iB/Dm3MZ,sB+Dh4MC,QAAS,e/Dm4MV,a+D73MC,sBAOE,QAAS,kB/D23MZ,4B+D53MC,QAAS,eCpLT,ahEojNC,4BACF,QAAA,wBC6BD,aACE,cACE,QAAS","sourcesContent":["/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS and IE text size adjust after device orientation change,\n// without disabling user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background-color: transparent;\n}\n\n//\n// Improve readability of focused elements when they are also in an\n// active/hover state.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome.\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n box-sizing: content-box; //2\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n box-shadow: none !important;\n text-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n // Bootstrap specific changes end\n}\n","/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n[hidden],\ntemplate {\n display: none;\n}\na {\n background-color: transparent;\n}\na:active,\na:hover {\n outline: 0;\n}\nabbr[title] {\n border-bottom: 1px dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\nmark {\n background: #ff0;\n color: #000;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsup {\n top: -0.5em;\n}\nsub {\n bottom: -0.25em;\n}\nimg {\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n box-sizing: content-box;\n height: 0;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0;\n}\nbutton {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\ninput {\n line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n border: 0;\n padding: 0;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\ntd,\nth {\n padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('../fonts/glyphicons-halflings-regular.eot');\n src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\002a\";\n}\n.glyphicon-plus:before {\n content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n.glyphicon-cd:before {\n content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n content: \"\\e204\";\n}\n.glyphicon-copy:before {\n content: \"\\e205\";\n}\n.glyphicon-paste:before {\n content: \"\\e206\";\n}\n.glyphicon-alert:before {\n content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n content: \"\\e210\";\n}\n.glyphicon-king:before {\n content: \"\\e211\";\n}\n.glyphicon-queen:before {\n content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n content: \"\\e214\";\n}\n.glyphicon-knight:before {\n content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n content: \"\\e216\";\n}\n.glyphicon-tent:before {\n content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n content: \"\\e218\";\n}\n.glyphicon-bed:before {\n content: \"\\e219\";\n}\n.glyphicon-apple:before {\n content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n content: \"\\e227\";\n}\n.glyphicon-btc:before {\n content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n content: \"\\e227\";\n}\n.glyphicon-yen:before {\n content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n content: \"\\e232\";\n}\n.glyphicon-education:before {\n content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n content: \"\\e237\";\n}\n.glyphicon-oil:before {\n content: \"\\e238\";\n}\n.glyphicon-grain:before {\n content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n content: \"\\e253\";\n}\n.glyphicon-console:before {\n content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n content: \"\\e260\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333333;\n background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #337ab7;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #23527c;\n text-decoration: underline;\n}\na:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n padding: 4px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n[role=\"button\"] {\n cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: normal;\n line-height: 1;\n color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n background-color: #fcf8e3;\n padding: .2em;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777777;\n}\n.text-primary {\n color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n color: #286090;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n background-color: #286090;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n.list-inline > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted #777777;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n text-align: right;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: '\\00A0 \\2014';\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #fff;\n background-color: #333;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n word-break: break-all;\n word-wrap: break-word;\n color: #333333;\n background-color: #f5f5f5;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n.row {\n margin-left: -15px;\n margin-right: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n@media (min-width: 768px) {\n .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 992px) {\n .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 1200px) {\n .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n}\ntable {\n background-color: transparent;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #ddd;\n}\n.table .table {\n background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-column;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-cell;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #ddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n min-width: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n color: #999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999;\n}\n.form-control::-ms-expand {\n border: 0;\n background-color: transparent;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n}\ntextarea.form-control {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"].form-control,\n input[type=\"time\"].form-control,\n input[type=\"datetime-local\"].form-control,\n input[type=\"month\"].form-control {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm,\n .input-group-sm input[type=\"date\"],\n .input-group-sm input[type=\"time\"],\n .input-group-sm input[type=\"datetime-local\"],\n .input-group-sm input[type=\"month\"] {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg,\n .input-group-lg input[type=\"date\"],\n .input-group-lg input[type=\"time\"],\n .input-group-lg input[type=\"datetime-local\"],\n .input-group-lg input[type=\"month\"] {\n line-height: 46px;\n }\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.form-control-static {\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n min-height: 34px;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-left: 0;\n padding-right: 0;\n}\n.input-sm {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n height: auto;\n}\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.form-group-sm select.form-control {\n height: 30px;\n line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n height: auto;\n}\n.form-group-sm .form-control-static {\n height: 30px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.input-lg {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-lg {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n height: auto;\n}\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.form-group-lg select.form-control {\n height: 46px;\n line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n height: auto;\n}\n.form-group-lg .form-control-static {\n height: 46px;\n min-height: 38px;\n padding: 11px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n border-color: #3c763d;\n background-color: #dff0d8;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n border-color: #8a6d3b;\n background-color: #fcf8e3;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n border-color: #a94442;\n background-color: #f2dede;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 7px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-left: -15px;\n margin-right: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: 7px;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 11px;\n font-size: 18px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n font-size: 12px;\n }\n}\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n white-space: nowrap;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n outline: 0;\n background-image: none;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n opacity: 0.65;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n pointer-events: none;\n}\n.btn-default {\n color: #333;\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n color: #333;\n background-color: #e6e6e6;\n border-color: #8c8c8c;\n}\n.btn-default:hover {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n color: #333;\n background-color: #d4d4d4;\n border-color: #8c8c8c;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n background-image: none;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default .badge {\n color: #fff;\n background-color: #333;\n}\n.btn-primary {\n color: #fff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n color: #fff;\n background-color: #286090;\n border-color: #122b40;\n}\n.btn-primary:hover {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n color: #fff;\n background-color: #204d74;\n border-color: #122b40;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n background-image: none;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.btn-success {\n color: #fff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n color: #fff;\n background-color: #449d44;\n border-color: #255625;\n}\n.btn-success:hover {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n color: #fff;\n background-color: #398439;\n border-color: #255625;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n background-image: none;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #fff;\n}\n.btn-info {\n color: #fff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n color: #fff;\n background-color: #31b0d5;\n border-color: #1b6d85;\n}\n.btn-info:hover {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n color: #fff;\n background-color: #269abc;\n border-color: #1b6d85;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n background-image: none;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #fff;\n}\n.btn-warning {\n color: #fff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n color: #fff;\n background-color: #ec971f;\n border-color: #985f0d;\n}\n.btn-warning:hover {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n color: #fff;\n background-color: #d58512;\n border-color: #985f0d;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n background-image: none;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #fff;\n}\n.btn-danger {\n color: #fff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n color: #fff;\n background-color: #c9302c;\n border-color: #761c19;\n}\n.btn-danger:hover {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n color: #fff;\n background-color: #ac2925;\n border-color: #761c19;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n background-image: none;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #fff;\n}\n.btn-link {\n color: #337ab7;\n font-weight: normal;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n}\n.collapse.in {\n display: block;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-top: 4px solid \\9;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n list-style: none;\n font-size: 14px;\n text-align: left;\n background-color: #fff;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n background-clip: padding-box;\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: 1.42857143;\n color: #333333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n text-decoration: none;\n color: #262626;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n background-color: #337ab7;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n cursor: not-allowed;\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n left: auto;\n right: 0;\n}\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n border-top: 0;\n border-bottom: 4px dashed;\n border-bottom: 4px solid \\9;\n content: \"\";\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n left: auto;\n right: 0;\n }\n .navbar-right .dropdown-menu-left {\n left: 0;\n right: auto;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group .form-control:focus {\n z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n z-index: 2;\n margin-left: -1px;\n}\n.nav {\n margin-bottom: 0;\n padding-left: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #337ab7;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555555;\n background-color: #fff;\n border: 1px solid #ddd;\n border-bottom-color: transparent;\n cursor: default;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #fff;\n background-color: #337ab7;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n overflow-x: visible;\n padding-right: 15px;\n padding-left: 15px;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-left: 0;\n padding-right: 0;\n }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.navbar-brand {\n float: left;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n height: 50px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: 15px;\n padding: 9px 10px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n margin-left: -15px;\n margin-right: -15px;\n padding: 10px 15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-left: 15px;\n margin-right: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n background-color: #e7e7e7;\n color: #555;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-link {\n color: #777;\n}\n.navbar-default .navbar-link:hover {\n color: #333;\n}\n.navbar-default .btn-link {\n color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #ccc;\n}\n.navbar-inverse {\n background-color: #222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #fff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n background-color: #080808;\n color: #fff;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #fff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #fff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n content: \"/\\00a0\";\n padding: 0 5px;\n color: #ccc;\n}\n.breadcrumb > .active {\n color: #777777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n line-height: 1.42857143;\n text-decoration: none;\n color: #337ab7;\n background-color: #fff;\n border: 1px solid #ddd;\n margin-left: -1px;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-bottom-left-radius: 4px;\n border-top-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-bottom-right-radius: 4px;\n border-top-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n z-index: 2;\n color: #23527c;\n background-color: #eeeeee;\n border-color: #ddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 3;\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n cursor: default;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777777;\n background-color: #fff;\n border-color: #ddd;\n cursor: not-allowed;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-bottom-left-radius: 6px;\n border-top-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-bottom-right-radius: 6px;\n border-top-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-bottom-left-radius: 3px;\n border-top-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n list-style: none;\n text-align: center;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777777;\n background-color: #fff;\n cursor: not-allowed;\n}\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #286090;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n color: #fff;\n line-height: 1;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: #777777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding-top: 30px;\n padding-bottom: 30px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n border-radius: 6px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding-top: 48px;\n padding-bottom: 48px;\n }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-left: 60px;\n padding-right: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-left: auto;\n margin-right: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #337ab7;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n background-color: #dff0d8;\n border-color: #d6e9c6;\n color: #3c763d;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n background-color: #d9edf7;\n border-color: #bce8f1;\n color: #31708f;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n background-color: #fcf8e3;\n border-color: #faebcc;\n color: #8a6d3b;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n background-color: #f2dede;\n border-color: #ebccd1;\n color: #a94442;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n overflow: hidden;\n height: 20px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #fff;\n text-align: center;\n background-color: #337ab7;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n.media-body {\n width: 10000px;\n}\n.media-object {\n display: block;\n}\n.media-object.img-thumbnail {\n max-width: none;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n margin-bottom: 20px;\n padding-left: 0;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\na.list-group-item,\nbutton.list-group-item {\n color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n text-decoration: none;\n color: #555;\n background-color: #f5f5f5;\n}\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n background-color: #eeeeee;\n color: #777777;\n cursor: not-allowed;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #c7ddef;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #fff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #ddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-left: 15px;\n padding-right: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n border: 0;\n margin-bottom: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #ddd;\n}\n.panel-default {\n border-color: #ddd;\n}\n.panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ddd;\n}\n.panel-primary {\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #337ab7;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n}\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: 0.2;\n filter: alpha(opacity=20);\n}\n.close:hover,\n.close:focus {\n color: #000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #fff;\n border: 1px solid #999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-clip: padding-box;\n outline: 0;\n}\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000;\n}\n.modal-backdrop.fade {\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.modal-backdrop.in {\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 12px;\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.tooltip.in {\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.tooltip.top {\n margin-top: -3px;\n padding: 5px 0;\n}\n.tooltip.right {\n margin-left: 3px;\n padding: 0 5px;\n}\n.tooltip.bottom {\n margin-top: 3px;\n padding: 5px 0;\n}\n.tooltip.left {\n margin-left: -3px;\n padding: 0 5px;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n bottom: 0;\n right: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 14px;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover-title {\n margin: 0;\n padding: 8px 14px;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow:after {\n border-width: 10px;\n content: \"\";\n}\n.popover.top > .arrow {\n left: 50%;\n margin-left: -11px;\n border-bottom-width: 0;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n bottom: -11px;\n}\n.popover.top > .arrow:after {\n content: \" \";\n bottom: 1px;\n margin-left: -10px;\n border-bottom-width: 0;\n border-top-color: #fff;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-left-width: 0;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n.popover.right > .arrow:after {\n content: \" \";\n left: 1px;\n bottom: -10px;\n border-left-width: 0;\n border-right-color: #fff;\n}\n.popover.bottom > .arrow {\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n top: -11px;\n}\n.popover.bottom > .arrow:after {\n content: \" \";\n top: 1px;\n margin-left: -10px;\n border-top-width: 0;\n border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: #fff;\n bottom: -10px;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n}\n.carousel-inner > .item {\n display: none;\n position: relative;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform 0.6s ease-in-out;\n -moz-transition: -moz-transform 0.6s ease-in-out;\n -o-transition: -o-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000px;\n -moz-perspective: 1000px;\n perspective: 1000px;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 15%;\n opacity: 0.5;\n filter: alpha(opacity=50);\n font-size: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n}\n.carousel-control.right {\n left: auto;\n right: 0;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n}\n.carousel-control:hover,\n.carousel-control:focus {\n outline: 0;\n color: #fff;\n text-decoration: none;\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n margin-top: -10px;\n z-index: 5;\n display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n line-height: 1;\n font-family: serif;\n}\n.carousel-control .icon-prev:before {\n content: '\\2039';\n}\n.carousel-control .icon-next:before {\n content: '\\203a';\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid #fff;\n border-radius: 10px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-indicators .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: #fff;\n}\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -10px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -10px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -10px;\n }\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n content: \" \";\n display: table;\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table !important;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table !important;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table !important;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table !important;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table !important;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n font-family: sans-serif;\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n[hidden],\ntemplate {\n display: none;\n}\na {\n background-color: transparent;\n}\na:active,\na:hover {\n outline: 0;\n}\nabbr[title] {\n border-bottom: 1px dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n margin: .67em 0;\n font-size: 2em;\n}\nmark {\n color: #000;\n background: #ff0;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\nsup {\n top: -.5em;\n}\nsub {\n bottom: -.25em;\n}\nimg {\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n height: 0;\n -webkit-box-sizing: content-box;\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n margin: 0;\n font: inherit;\n color: inherit;\n}\nbutton {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n padding: 0;\n border: 0;\n}\ninput {\n line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: content-box;\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n -webkit-appearance: textfield;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n padding: .35em .625em .75em;\n margin: 0 2px;\n border: 1px solid #c0c0c0;\n}\nlegend {\n padding: 0;\n border: 0;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable {\n border-spacing: 0;\n border-collapse: collapse;\n}\ntd,\nth {\n padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n color: #000 !important;\n text-shadow: none !important;\n background: transparent !important;\n -webkit-box-shadow: none !important;\n box-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: 'Glyphicons Halflings';\n\n src: url('../fonts/glyphicons-halflings-regular.eot');\n src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\002a\";\n}\n.glyphicon-plus:before {\n content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n.glyphicon-cd:before {\n content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n content: \"\\e204\";\n}\n.glyphicon-copy:before {\n content: \"\\e205\";\n}\n.glyphicon-paste:before {\n content: \"\\e206\";\n}\n.glyphicon-alert:before {\n content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n content: \"\\e210\";\n}\n.glyphicon-king:before {\n content: \"\\e211\";\n}\n.glyphicon-queen:before {\n content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n content: \"\\e214\";\n}\n.glyphicon-knight:before {\n content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n content: \"\\e216\";\n}\n.glyphicon-tent:before {\n content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n content: \"\\e218\";\n}\n.glyphicon-bed:before {\n content: \"\\e219\";\n}\n.glyphicon-apple:before {\n content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n content: \"\\e227\";\n}\n.glyphicon-btc:before {\n content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n content: \"\\e227\";\n}\n.glyphicon-yen:before {\n content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n content: \"\\e232\";\n}\n.glyphicon-education:before {\n content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n content: \"\\e237\";\n}\n.glyphicon-oil:before {\n content: \"\\e238\";\n}\n.glyphicon-grain:before {\n content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n content: \"\\e253\";\n}\n.glyphicon-console:before {\n content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n content: \"\\e260\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333;\n background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #337ab7;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #23527c;\n text-decoration: underline;\n}\na:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n display: inline-block;\n max-width: 100%;\n height: auto;\n padding: 4px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: all .2s ease-in-out;\n -o-transition: all .2s ease-in-out;\n transition: all .2s ease-in-out;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n[role=\"button\"] {\n cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: normal;\n line-height: 1;\n color: #777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n padding: .2em;\n background-color: #fcf8e3;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777;\n}\n.text-primary {\n color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n color: #286090;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n background-color: #286090;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n margin-left: -5px;\n list-style: none;\n}\n.list-inline > li {\n display: inline-block;\n padding-right: 5px;\n padding-left: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n overflow: hidden;\n clear: left;\n text-align: right;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted #777;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n text-align: right;\n border-right: 5px solid #eee;\n border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: '\\00A0 \\2014';\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #fff;\n background-color: #333;\n border-radius: 3px;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n color: #333;\n word-break: break-all;\n word-wrap: break-word;\n background-color: #f5f5f5;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n.row {\n margin-right: -15px;\n margin-left: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-right: 15px;\n padding-left: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0;\n }\n}\n@media (min-width: 992px) {\n .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0;\n }\n}\n@media (min-width: 1200px) {\n .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0;\n }\n}\ntable {\n background-color: transparent;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #ddd;\n}\n.table .table {\n background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n position: static;\n display: table-column;\n float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n display: table-cell;\n float: none;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n min-height: .01%;\n overflow-x: auto;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #ddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n}\n.form-control::-moz-placeholder {\n color: #999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999;\n}\n.form-control::-ms-expand {\n background-color: transparent;\n border: 0;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n background-color: #eee;\n opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n}\ntextarea.form-control {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"].form-control,\n input[type=\"time\"].form-control,\n input[type=\"datetime-local\"].form-control,\n input[type=\"month\"].form-control {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm,\n .input-group-sm input[type=\"date\"],\n .input-group-sm input[type=\"time\"],\n .input-group-sm input[type=\"datetime-local\"],\n .input-group-sm input[type=\"month\"] {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg,\n .input-group-lg input[type=\"date\"],\n .input-group-lg input[type=\"time\"],\n .input-group-lg input[type=\"datetime-local\"],\n .input-group-lg input[type=\"month\"] {\n line-height: 46px;\n }\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-top: 4px \\9;\n margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n vertical-align: middle;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.form-control-static {\n min-height: 34px;\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-right: 0;\n padding-left: 0;\n}\n.input-sm {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n height: auto;\n}\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.form-group-sm select.form-control {\n height: 30px;\n line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n height: auto;\n}\n.form-group-sm .form-control-static {\n height: 30px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.input-lg {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-lg {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n height: auto;\n}\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.form-group-lg select.form-control {\n height: 46px;\n line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n height: auto;\n}\n.form-group-lg .form-control-static {\n height: 46px;\n min-height: 38px;\n padding: 11px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n background-color: #f2dede;\n border-color: #a94442;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n padding-top: 7px;\n margin-top: 0;\n margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n padding-top: 7px;\n margin-bottom: 0;\n text-align: right;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 11px;\n font-size: 18px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n font-size: 12px;\n }\n}\n.btn {\n display: inline-block;\n padding: 6px 12px;\n margin-bottom: 0;\n font-size: 14px;\n font-weight: normal;\n line-height: 1.42857143;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n -ms-touch-action: manipulation;\n touch-action: manipulation;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n outline: 0;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none;\n opacity: .65;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n pointer-events: none;\n}\n.btn-default {\n color: #333;\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n color: #333;\n background-color: #e6e6e6;\n border-color: #8c8c8c;\n}\n.btn-default:hover {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n color: #333;\n background-color: #d4d4d4;\n border-color: #8c8c8c;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n background-image: none;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default .badge {\n color: #fff;\n background-color: #333;\n}\n.btn-primary {\n color: #fff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n color: #fff;\n background-color: #286090;\n border-color: #122b40;\n}\n.btn-primary:hover {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n color: #fff;\n background-color: #204d74;\n border-color: #122b40;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n background-image: none;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.btn-success {\n color: #fff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n color: #fff;\n background-color: #449d44;\n border-color: #255625;\n}\n.btn-success:hover {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n color: #fff;\n background-color: #398439;\n border-color: #255625;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n background-image: none;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #fff;\n}\n.btn-info {\n color: #fff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n color: #fff;\n background-color: #31b0d5;\n border-color: #1b6d85;\n}\n.btn-info:hover {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n color: #fff;\n background-color: #269abc;\n border-color: #1b6d85;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n background-image: none;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #fff;\n}\n.btn-warning {\n color: #fff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n color: #fff;\n background-color: #ec971f;\n border-color: #985f0d;\n}\n.btn-warning:hover {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n color: #fff;\n background-color: #d58512;\n border-color: #985f0d;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n background-image: none;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #fff;\n}\n.btn-danger {\n color: #fff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n color: #fff;\n background-color: #c9302c;\n border-color: #761c19;\n}\n.btn-danger:hover {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n color: #fff;\n background-color: #ac2925;\n border-color: #761c19;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n background-image: none;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #fff;\n}\n.btn-link {\n font-weight: normal;\n color: #337ab7;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity .15s linear;\n -o-transition: opacity .15s linear;\n transition: opacity .15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n}\n.collapse.in {\n display: block;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-timing-function: ease;\n -o-transition-timing-function: ease;\n transition-timing-function: ease;\n -webkit-transition-duration: .35s;\n -o-transition-duration: .35s;\n transition-duration: .35s;\n -webkit-transition-property: height, visibility;\n -o-transition-property: height, visibility;\n transition-property: height, visibility;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-top: 4px solid \\9;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n font-size: 14px;\n text-align: left;\n list-style: none;\n background-color: #fff;\n -webkit-background-clip: padding-box;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, .15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: 1.42857143;\n color: #333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n color: #262626;\n text-decoration: none;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #fff;\n text-decoration: none;\n background-color: #337ab7;\n outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n cursor: not-allowed;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu-left {\n right: auto;\n left: 0;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n content: \"\";\n border-top: 0;\n border-bottom: 4px dashed;\n border-bottom: 4px solid \\9;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n right: 0;\n left: auto;\n }\n .navbar-right .dropdown-menu-left {\n right: auto;\n left: 0;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-right: 8px;\n padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-right: 12px;\n padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n display: table-cell;\n float: none;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-right: 0;\n padding-left: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group .form-control:focus {\n z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555;\n text-align: center;\n background-color: #eee;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n z-index: 2;\n margin-left: -1px;\n}\n.nav {\n padding-left: 0;\n margin-bottom: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eee;\n}\n.nav > li.disabled > a {\n color: #777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777;\n text-decoration: none;\n cursor: not-allowed;\n background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eee;\n border-color: #337ab7;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eee #eee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555;\n cursor: default;\n background-color: #fff;\n border: 1px solid #ddd;\n border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n margin-bottom: 5px;\n text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #fff;\n background-color: #337ab7;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n margin-bottom: 5px;\n text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n padding-right: 15px;\n padding-left: 15px;\n overflow-x: visible;\n -webkit-overflow-scrolling: touch;\n border-top: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-right: 0;\n padding-left: 0;\n }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.navbar-brand {\n float: left;\n height: 50px;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n padding: 9px 10px;\n margin-top: 8px;\n margin-right: 15px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n padding: 10px 15px;\n margin-top: 8px;\n margin-right: -15px;\n margin-bottom: 8px;\n margin-left: -15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n padding-top: 0;\n padding-bottom: 0;\n margin-right: 0;\n margin-left: 0;\n border: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-right: 15px;\n margin-left: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n color: #555;\n background-color: #e7e7e7;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-link {\n color: #777;\n}\n.navbar-default .navbar-link:hover {\n color: #333;\n}\n.navbar-default .btn-link {\n color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #ccc;\n}\n.navbar-inverse {\n background-color: #222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #fff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n color: #fff;\n background-color: #080808;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #fff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #fff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n padding: 0 5px;\n color: #ccc;\n content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n color: #777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n margin-left: -1px;\n line-height: 1.42857143;\n color: #337ab7;\n text-decoration: none;\n background-color: #fff;\n border: 1px solid #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n z-index: 2;\n color: #23527c;\n background-color: #eee;\n border-color: #ddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 3;\n color: #fff;\n cursor: default;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777;\n cursor: not-allowed;\n background-color: #fff;\n border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-top-left-radius: 6px;\n border-bottom-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-top-right-radius: 6px;\n border-bottom-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-top-left-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-top-right-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n text-align: center;\n list-style: none;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777;\n cursor: not-allowed;\n background-color: #fff;\n}\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #286090;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: middle;\n background-color: #777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding-top: 30px;\n padding-bottom: 30px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n padding-right: 15px;\n padding-left: 15px;\n border-radius: 6px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding-top: 48px;\n padding-bottom: 48px;\n }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-right: 60px;\n padding-left: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: border .2s ease-in-out;\n -o-transition: border .2s ease-in-out;\n transition: border .2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-right: auto;\n margin-left: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #337ab7;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@-o-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n height: 20px;\n margin-bottom: 20px;\n overflow: hidden;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n}\n.progress-bar {\n float: left;\n width: 0;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #fff;\n text-align: center;\n background-color: #337ab7;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n -webkit-transition: width .6s ease;\n -o-transition: width .6s ease;\n transition: width .6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n -webkit-background-size: 40px 40px;\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media,\n.media-body {\n overflow: hidden;\n zoom: 1;\n}\n.media-body {\n width: 10000px;\n}\n.media-object {\n display: block;\n}\n.media-object.img-thumbnail {\n max-width: none;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n padding-left: 0;\n margin-bottom: 20px;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\na.list-group-item,\nbutton.list-group-item {\n color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n color: #555;\n text-decoration: none;\n background-color: #f5f5f5;\n}\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n color: #777;\n cursor: not-allowed;\n background-color: #eee;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #c7ddef;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #fff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #ddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-right: 15px;\n padding-left: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n margin-bottom: 0;\n border: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #ddd;\n}\n.panel-default {\n border-color: #ddd;\n}\n.panel-default > .panel-heading {\n color: #333;\n background-color: #f5f5f5;\n border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ddd;\n}\n.panel-primary {\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #337ab7;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 0;\n}\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, .15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n filter: alpha(opacity=20);\n opacity: .2;\n}\n.close:hover,\n.close:focus {\n color: #000;\n text-decoration: none;\n cursor: pointer;\n filter: alpha(opacity=50);\n opacity: .5;\n}\nbutton.close {\n -webkit-appearance: none;\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n display: none;\n overflow: hidden;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transition: -webkit-transform .3s ease-out;\n -o-transition: -o-transform .3s ease-out;\n transition: transform .3s ease-out;\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #fff;\n -webkit-background-clip: padding-box;\n background-clip: padding-box;\n border: 1px solid #999;\n border: 1px solid rgba(0, 0, 0, .2);\n border-radius: 6px;\n outline: 0;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n}\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000;\n}\n.modal-backdrop.fade {\n filter: alpha(opacity=0);\n opacity: 0;\n}\n.modal-backdrop.in {\n filter: alpha(opacity=50);\n opacity: .5;\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-bottom: 0;\n margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 12px;\n font-style: normal;\n font-weight: normal;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n white-space: normal;\n filter: alpha(opacity=0);\n opacity: 0;\n\n line-break: auto;\n}\n.tooltip.in {\n filter: alpha(opacity=90);\n opacity: .9;\n}\n.tooltip.top {\n padding: 5px 0;\n margin-top: -3px;\n}\n.tooltip.right {\n padding: 0 5px;\n margin-left: 3px;\n}\n.tooltip.bottom {\n padding: 5px 0;\n margin-top: 3px;\n}\n.tooltip.left {\n padding: 0 5px;\n margin-left: -3px;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n right: 5px;\n bottom: 0;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n font-style: normal;\n font-weight: normal;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n letter-spacing: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n white-space: normal;\n background-color: #fff;\n -webkit-background-clip: padding-box;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, .2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n\n line-break: auto;\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover-title {\n padding: 8px 14px;\n margin: 0;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow:after {\n content: \"\";\n border-width: 10px;\n}\n.popover.top > .arrow {\n bottom: -11px;\n left: 50%;\n margin-left: -11px;\n border-top-color: #999;\n border-top-color: rgba(0, 0, 0, .25);\n border-bottom-width: 0;\n}\n.popover.top > .arrow:after {\n bottom: 1px;\n margin-left: -10px;\n content: \" \";\n border-top-color: #fff;\n border-bottom-width: 0;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-right-color: #999;\n border-right-color: rgba(0, 0, 0, .25);\n border-left-width: 0;\n}\n.popover.right > .arrow:after {\n bottom: -10px;\n left: 1px;\n content: \" \";\n border-right-color: #fff;\n border-left-width: 0;\n}\n.popover.bottom > .arrow {\n top: -11px;\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999;\n border-bottom-color: rgba(0, 0, 0, .25);\n}\n.popover.bottom > .arrow:after {\n top: 1px;\n margin-left: -10px;\n content: \" \";\n border-top-width: 0;\n border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999;\n border-left-color: rgba(0, 0, 0, .25);\n}\n.popover.left > .arrow:after {\n right: 1px;\n bottom: -10px;\n content: \" \";\n border-right-width: 0;\n border-left-color: #fff;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n width: 100%;\n overflow: hidden;\n}\n.carousel-inner > .item {\n position: relative;\n display: none;\n -webkit-transition: .6s ease-in-out left;\n -o-transition: .6s ease-in-out left;\n transition: .6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform .6s ease-in-out;\n -o-transition: -o-transform .6s ease-in-out;\n transition: transform .6s ease-in-out;\n\n -webkit-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000px;\n perspective: 1000px;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n left: 0;\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n left: 0;\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n left: 0;\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n width: 15%;\n font-size: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n background-color: rgba(0, 0, 0, 0);\n filter: alpha(opacity=50);\n opacity: .5;\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));\n background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n background-repeat: repeat-x;\n}\n.carousel-control.right {\n right: 0;\n left: auto;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));\n background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n background-repeat: repeat-x;\n}\n.carousel-control:hover,\n.carousel-control:focus {\n color: #fff;\n text-decoration: none;\n filter: alpha(opacity=90);\n outline: 0;\n opacity: .9;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n z-index: 5;\n display: inline-block;\n margin-top: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n font-family: serif;\n line-height: 1;\n}\n.carousel-control .icon-prev:before {\n content: '\\2039';\n}\n.carousel-control .icon-next:before {\n content: '\\203a';\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n padding-left: 0;\n margin-left: -30%;\n text-align: center;\n list-style: none;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n border: 1px solid #fff;\n border-radius: 10px;\n}\n.carousel-indicators .active {\n width: 12px;\n height: 12px;\n margin: 0;\n background-color: #fff;\n}\n.carousel-caption {\n position: absolute;\n right: 15%;\n bottom: 20px;\n left: 15%;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -10px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -10px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -10px;\n }\n .carousel-caption {\n right: 20%;\n left: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n display: table;\n content: \" \";\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-right: auto;\n margin-left: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table !important;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table !important;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table !important;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table !important;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table !important;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// <a href=\"#\"><span class=\"glyphicon glyphicon-star\"></span> Star</a>\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('@{icon-font-path}@{icon-font-name}.eot');\n src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n url('@{icon-font-path}@{icon-font-name}.woff2') format('woff2'),\n url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\002a\"; } }\n.glyphicon-plus { &:before { content: \"\\002b\"; } }\n.glyphicon-euro,\n.glyphicon-eur { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n.glyphicon-cd { &:before { content: \"\\e201\"; } }\n.glyphicon-save-file { &:before { content: \"\\e202\"; } }\n.glyphicon-open-file { &:before { content: \"\\e203\"; } }\n.glyphicon-level-up { &:before { content: \"\\e204\"; } }\n.glyphicon-copy { &:before { content: \"\\e205\"; } }\n.glyphicon-paste { &:before { content: \"\\e206\"; } }\n// The following 2 Glyphicons are omitted for the time being because\n// they currently use Unicode codepoints that are outside the\n// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle\n// non-BMP codepoints in CSS string escapes, and thus can't display these two icons.\n// Notably, the bug affects some older versions of the Android Browser.\n// More info: https://github.com/twbs/bootstrap/issues/10106\n// .glyphicon-door { &:before { content: \"\\1f6aa\"; } }\n// .glyphicon-key { &:before { content: \"\\1f511\"; } }\n.glyphicon-alert { &:before { content: \"\\e209\"; } }\n.glyphicon-equalizer { &:before { content: \"\\e210\"; } }\n.glyphicon-king { &:before { content: \"\\e211\"; } }\n.glyphicon-queen { &:before { content: \"\\e212\"; } }\n.glyphicon-pawn { &:before { content: \"\\e213\"; } }\n.glyphicon-bishop { &:before { content: \"\\e214\"; } }\n.glyphicon-knight { &:before { content: \"\\e215\"; } }\n.glyphicon-baby-formula { &:before { content: \"\\e216\"; } }\n.glyphicon-tent { &:before { content: \"\\26fa\"; } }\n.glyphicon-blackboard { &:before { content: \"\\e218\"; } }\n.glyphicon-bed { &:before { content: \"\\e219\"; } }\n.glyphicon-apple { &:before { content: \"\\f8ff\"; } }\n.glyphicon-erase { &:before { content: \"\\e221\"; } }\n.glyphicon-hourglass { &:before { content: \"\\231b\"; } }\n.glyphicon-lamp { &:before { content: \"\\e223\"; } }\n.glyphicon-duplicate { &:before { content: \"\\e224\"; } }\n.glyphicon-piggy-bank { &:before { content: \"\\e225\"; } }\n.glyphicon-scissors { &:before { content: \"\\e226\"; } }\n.glyphicon-bitcoin { &:before { content: \"\\e227\"; } }\n.glyphicon-btc { &:before { content: \"\\e227\"; } }\n.glyphicon-xbt { &:before { content: \"\\e227\"; } }\n.glyphicon-yen { &:before { content: \"\\00a5\"; } }\n.glyphicon-jpy { &:before { content: \"\\00a5\"; } }\n.glyphicon-ruble { &:before { content: \"\\20bd\"; } }\n.glyphicon-rub { &:before { content: \"\\20bd\"; } }\n.glyphicon-scale { &:before { content: \"\\e230\"; } }\n.glyphicon-ice-lolly { &:before { content: \"\\e231\"; } }\n.glyphicon-ice-lolly-tasted { &:before { content: \"\\e232\"; } }\n.glyphicon-education { &:before { content: \"\\e233\"; } }\n.glyphicon-option-horizontal { &:before { content: \"\\e234\"; } }\n.glyphicon-option-vertical { &:before { content: \"\\e235\"; } }\n.glyphicon-menu-hamburger { &:before { content: \"\\e236\"; } }\n.glyphicon-modal-window { &:before { content: \"\\e237\"; } }\n.glyphicon-oil { &:before { content: \"\\e238\"; } }\n.glyphicon-grain { &:before { content: \"\\e239\"; } }\n.glyphicon-sunglasses { &:before { content: \"\\e240\"; } }\n.glyphicon-text-size { &:before { content: \"\\e241\"; } }\n.glyphicon-text-color { &:before { content: \"\\e242\"; } }\n.glyphicon-text-background { &:before { content: \"\\e243\"; } }\n.glyphicon-object-align-top { &:before { content: \"\\e244\"; } }\n.glyphicon-object-align-bottom { &:before { content: \"\\e245\"; } }\n.glyphicon-object-align-horizontal{ &:before { content: \"\\e246\"; } }\n.glyphicon-object-align-left { &:before { content: \"\\e247\"; } }\n.glyphicon-object-align-vertical { &:before { content: \"\\e248\"; } }\n.glyphicon-object-align-right { &:before { content: \"\\e249\"; } }\n.glyphicon-triangle-right { &:before { content: \"\\e250\"; } }\n.glyphicon-triangle-left { &:before { content: \"\\e251\"; } }\n.glyphicon-triangle-bottom { &:before { content: \"\\e252\"; } }\n.glyphicon-triangle-top { &:before { content: \"\\e253\"; } }\n.glyphicon-console { &:before { content: \"\\e254\"; } }\n.glyphicon-superscript { &:before { content: \"\\e255\"; } }\n.glyphicon-subscript { &:before { content: \"\\e256\"; } }\n.glyphicon-menu-left { &:before { content: \"\\e257\"; } }\n.glyphicon-menu-right { &:before { content: \"\\e258\"; } }\n.glyphicon-menu-down { &:before { content: \"\\e259\"; } }\n.glyphicon-menu-up { &:before { content: \"\\e260\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n\n\n// iOS \"clickable elements\" fix for role=\"button\"\n//\n// Fixes \"clickability\" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\"button\"\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n[role=\"button\"] {\n cursor: pointer;\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // WebKit-specific. Other browsers will keep their default outline style.\n // (Initially tried to also force default via `outline: initial`,\n // but that seems to erroneously remove the outline in Firefox altogether.)\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\nmark,\n.mark {\n background-color: @state-warning-bg;\n padding: .2em;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @dl-horizontal-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n .text-uppercase();\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover,\n a&:focus {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover,\n a&:focus {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n margin-right: auto;\n margin-left: auto;\n padding-left: floor((@gutter / 2));\n padding-right: ceil((@gutter / 2));\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: ceil((@gutter / -2));\n margin-right: floor((@gutter / -2));\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: ceil((@grid-gutter-width / 2));\n padding-right: floor((@grid-gutter-width / 2));\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n}\ncaption {\n padding-top: @table-cell-padding;\n padding-bottom: @table-cell-padding;\n color: @text-muted;\n text-align: left;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-of-type(odd) {\n background-color: @table-bg-accent;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n background-color: @table-bg-hover;\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * 0.75);\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n}\n\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius; // Note: This has no effect on <select>s in some browsers, due to the limited stylability of <select>s in CSS.\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Unstyle the caret on `<select>`s in IE10+.\n &::-ms-expand {\n border: 0;\n background-color: transparent;\n }\n\n // Disabled and read-only inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &[disabled],\n &[readonly],\n fieldset[disabled] & {\n background-color: @input-bg-disabled;\n opacity: 1; // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655\n }\n\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n\n // Reset height for `textarea`s\n textarea& {\n height: auto;\n }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n\n\n// Special styles for iOS temporal inputs\n//\n// In Mobile Safari, setting `display: block` on temporal inputs causes the\n// text within the input to become vertically misaligned. As a workaround, we\n// set a pixel line-height that matches the given height of the input, but only\n// for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848\n//\n// Note that as of 9.3, iOS doesn't support `week`.\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"],\n input[type=\"time\"],\n input[type=\"datetime-local\"],\n input[type=\"month\"] {\n &.form-control {\n line-height: @input-height-base;\n }\n\n &.input-sm,\n .input-group-sm & {\n line-height: @input-height-small;\n }\n\n &.input-lg,\n .input-group-lg & {\n line-height: @input-height-large;\n }\n }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n margin-bottom: @form-group-margin-bottom;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n\n label {\n min-height: @line-height-computed; // Ensure the input doesn't jump when there is no text\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n// Some special care is needed because <label>s don't inherit their parent's `cursor`.\n//\n// Note: Neither radios nor checkboxes can be readonly.\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n &[disabled],\n &.disabled,\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n}\n// These classes are used directly on <label>s\n.radio-inline,\n.checkbox-inline {\n &.disabled,\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n}\n// These classes are used on elements with <label> descendants\n.radio,\n.checkbox {\n &.disabled,\n fieldset[disabled] & {\n label {\n cursor: @cursor-disabled;\n }\n }\n}\n\n\n// Static form control text\n//\n// Apply class to a `p` element to make any string of text align with labels in\n// a horizontal form layout.\n\n.form-control-static {\n // Size it appropriately next to real form controls\n padding-top: (@padding-base-vertical + 1);\n padding-bottom: (@padding-base-vertical + 1);\n // Remove default margin from `p`\n margin-bottom: 0;\n min-height: (@line-height-computed + @font-size-base);\n\n &.input-lg,\n &.input-sm {\n padding-left: 0;\n padding-right: 0;\n }\n}\n\n\n// Form control sizing\n//\n// Build on `.form-control` with modifier classes to decrease or increase the\n// height and font-size of form controls.\n//\n// The `.form-group-* form-control` variations are sadly duplicated to avoid the\n// issue documented in https://github.com/twbs/bootstrap/issues/15074.\n\n.input-sm {\n .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @input-border-radius-small);\n}\n.form-group-sm {\n .form-control {\n height: @input-height-small;\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n line-height: @line-height-small;\n border-radius: @input-border-radius-small;\n }\n select.form-control {\n height: @input-height-small;\n line-height: @input-height-small;\n }\n textarea.form-control,\n select[multiple].form-control {\n height: auto;\n }\n .form-control-static {\n height: @input-height-small;\n min-height: (@line-height-computed + @font-size-small);\n padding: (@padding-small-vertical + 1) @padding-small-horizontal;\n font-size: @font-size-small;\n line-height: @line-height-small;\n }\n}\n\n.input-lg {\n .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @input-border-radius-large);\n}\n.form-group-lg {\n .form-control {\n height: @input-height-large;\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-large;\n border-radius: @input-border-radius-large;\n }\n select.form-control {\n height: @input-height-large;\n line-height: @input-height-large;\n }\n textarea.form-control,\n select[multiple].form-control {\n height: auto;\n }\n .form-control-static {\n height: @input-height-large;\n min-height: (@line-height-computed + @font-size-large);\n padding: (@padding-large-vertical + 1) @padding-large-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-large;\n }\n}\n\n\n// Form control feedback states\n//\n// Apply contextual and semantic states to individual form controls.\n\n.has-feedback {\n // Enable absolute positioning\n position: relative;\n\n // Ensure icons don't overlap text\n .form-control {\n padding-right: (@input-height-base * 1.25);\n }\n}\n// Feedback icon (requires .glyphicon classes)\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2; // Ensure icon is above input groups\n display: block;\n width: @input-height-base;\n height: @input-height-base;\n line-height: @input-height-base;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: @input-height-large;\n height: @input-height-large;\n line-height: @input-height-large;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: @input-height-small;\n height: @input-height-small;\n line-height: @input-height-small;\n}\n\n// Feedback states\n.has-success {\n .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);\n}\n.has-warning {\n .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);\n}\n.has-error {\n .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);\n}\n\n// Reposition feedback icon if input has visible label above\n.has-feedback label {\n\n & ~ .form-control-feedback {\n top: (@line-height-computed + 5); // Height of the `label` and its margin\n }\n &.sr-only ~ .form-control-feedback {\n top: 0;\n }\n}\n\n\n// Help text\n//\n// Apply to any element you wish to create light text for placement immediately\n// below a form control. Use for general help, formatting, or instructional text.\n\n.help-block {\n display: block; // account for any element using help-block\n margin-top: 5px;\n margin-bottom: 10px;\n color: lighten(@text-color, 25%); // lighten the text some for contrast\n}\n\n\n// Inline forms\n//\n// Make forms appear inline(-block) by adding the `.form-inline` class. Inline\n// forms begin stacked on extra small (mobile) devices and then go inline when\n// viewports reach <768px.\n//\n// Requires wrapping inputs and labels with `.form-group` for proper display of\n// default HTML form controls and our custom form controls (e.g., input groups).\n//\n// Heads up! This is mixin-ed into `.navbar-form` in navbars.less.\n\n.form-inline {\n\n // Kick in the inline\n @media (min-width: @screen-sm-min) {\n // Inline-block all the things for \"inline\"\n .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n\n // In navbar-form, allow folks to *not* use `.form-group`\n .form-control {\n display: inline-block;\n width: auto; // Prevent labels from stacking above inputs in `.form-group`\n vertical-align: middle;\n }\n\n // Make static controls behave like regular ones\n .form-control-static {\n display: inline-block;\n }\n\n .input-group {\n display: inline-table;\n vertical-align: middle;\n\n .input-group-addon,\n .input-group-btn,\n .form-control {\n width: auto;\n }\n }\n\n // Input groups need that 100% width though\n .input-group > .form-control {\n width: 100%;\n }\n\n .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n\n // Remove default margin on radios/checkboxes that were used for stacking, and\n // then undo the floating of radios and checkboxes to match.\n .radio,\n .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n\n label {\n padding-left: 0;\n }\n }\n .radio input[type=\"radio\"],\n .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n\n // Re-override the feedback icon.\n .has-feedback .form-control-feedback {\n top: 0;\n }\n }\n}\n\n\n// Horizontal forms\n//\n// Horizontal forms are built on grid classes and allow you to create forms with\n// labels on the left and inputs on the right.\n\n.form-horizontal {\n\n // Consistent vertical alignment of radios and checkboxes\n //\n // Labels also get some reset styles, but that is scoped to a media query below.\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n }\n // Account for padding we're adding to ensure the alignment and of help text\n // and other content below items\n .radio,\n .checkbox {\n min-height: (@line-height-computed + (@padding-base-vertical + 1));\n }\n\n // Make form groups behave like rows\n .form-group {\n .make-row();\n }\n\n // Reset spacing and right align labels, but scope to media queries so that\n // labels on narrow viewports stack the same as a default form example.\n @media (min-width: @screen-sm-min) {\n .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: (@padding-base-vertical + 1); // Default padding plus a border\n }\n }\n\n // Validation states\n //\n // Reposition the icon because it's now within a grid column and columns have\n // `position: relative;` on them. Also accounts for the grid gutter padding.\n .has-feedback .form-control-feedback {\n right: floor((@grid-gutter-width / 2));\n }\n\n // Form group sizes\n //\n // Quick utility class for applying `.input-lg` and `.input-sm` styles to the\n // inputs and labels within a `.form-group`.\n .form-group-lg {\n @media (min-width: @screen-sm-min) {\n .control-label {\n padding-top: (@padding-large-vertical + 1);\n font-size: @font-size-large;\n }\n }\n }\n .form-group-sm {\n @media (min-width: @screen-sm-min) {\n .control-label {\n padding-top: (@padding-small-vertical + 1);\n font-size: @font-size-small;\n }\n }\n }\n}\n","// Form validation states\n//\n// Used in forms.less to generate the form validation CSS for warnings, errors,\n// and successes.\n\n.form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {\n // Color the label and help text\n .help-block,\n .control-label,\n .radio,\n .checkbox,\n .radio-inline,\n .checkbox-inline,\n &.radio label,\n &.checkbox label,\n &.radio-inline label,\n &.checkbox-inline label {\n color: @text-color;\n }\n // Set the border and box shadow on specific inputs to match\n .form-control {\n border-color: @border-color;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work\n &:focus {\n border-color: darken(@border-color, 10%);\n @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);\n .box-shadow(@shadow);\n }\n }\n // Set validation states also for addons\n .input-group-addon {\n color: @text-color;\n border-color: @border-color;\n background-color: @background-color;\n }\n // Optional feedback icon\n .form-control-feedback {\n color: @text-color;\n }\n}\n\n\n// Form control focus state\n//\n// Generate a customized focus state and for any input with the specified color,\n// which defaults to the `@input-border-focus` variable.\n//\n// We highly encourage you to not customize the default value, but instead use\n// this to tweak colors on an as-needed basis. This aesthetic change is based on\n// WebKit's default styles, but applicable to a wider range of browsers. Its\n// usability and accessibility should be taken into account with any change.\n//\n// Example usage: change the default blue border and shadow to white for better\n// contrast against a dark gray background.\n.form-control-focus(@color: @input-border-focus) {\n @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);\n &:focus {\n border-color: @color;\n outline: 0;\n .box-shadow(~\"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}\");\n }\n}\n\n// Form control sizing\n//\n// Relative text size, padding, and border-radii changes for form controls. For\n// horizontal sizing, wrap controls in the predefined grid classes. `<select>`\n// element gets special love because it's special, and that's a fact!\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n height: @input-height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n\n select& {\n height: @input-height;\n line-height: @input-height;\n }\n\n textarea&,\n select[multiple]& {\n height: auto;\n }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n display: inline-block;\n margin-bottom: 0; // For input.btn\n font-weight: @btn-font-weight;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n white-space: nowrap;\n .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @btn-border-radius-base);\n .user-select(none);\n\n &,\n &:active,\n &.active {\n &:focus,\n &.focus {\n .tab-focus();\n }\n }\n\n &:hover,\n &:focus,\n &.focus {\n color: @btn-default-color;\n text-decoration: none;\n }\n\n &:active,\n &.active {\n outline: 0;\n background-image: none;\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n .opacity(.65);\n .box-shadow(none);\n }\n\n a& {\n &.disabled,\n fieldset[disabled] & {\n pointer-events: none; // Future-proof disabling of clicks on `<a>` elements\n }\n }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n color: @link-color;\n font-weight: normal;\n border-radius: 0;\n\n &,\n &:active,\n &.active,\n &[disabled],\n fieldset[disabled] & {\n background-color: transparent;\n .box-shadow(none);\n }\n &,\n &:hover,\n &:focus,\n &:active {\n border-color: transparent;\n }\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n background-color: transparent;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @btn-link-disabled-color;\n text-decoration: none;\n }\n }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n // line-height: ensure even-numbered height of button next to large input\n .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @btn-border-radius-large);\n}\n.btn-sm {\n // line-height: ensure proper height of button next to small input\n .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n.btn-xs {\n .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:focus,\n &.focus {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 25%);\n }\n &:hover {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n\n &:hover,\n &:focus,\n &.focus {\n color: @color;\n background-color: darken(@background, 17%);\n border-color: darken(@border, 25%);\n }\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus,\n &.focus {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n","// Opacity\n\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.\n\n.fade {\n opacity: 0;\n .transition(opacity .15s linear);\n &.in {\n opacity: 1;\n }\n}\n\n.collapse {\n display: none;\n\n &.in { display: block; }\n tr&.in { display: table-row; }\n tbody&.in { display: table-row-group; }\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n .transition-property(~\"height, visibility\");\n .transition-duration(.35s);\n .transition-timing-function(ease);\n}\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: @caret-width-base dashed;\n border-top: @caret-width-base solid ~\"\\9\"; // IE8\n border-right: @caret-width-base solid transparent;\n border-left: @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropup,\n.dropdown {\n position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: @zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0; // override default ul\n list-style: none;\n font-size: @font-size-base;\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n background-color: @dropdown-bg;\n border: 1px solid @dropdown-fallback-border; // IE8 fallback\n border: 1px solid @dropdown-border;\n border-radius: @border-radius-base;\n .box-shadow(0 6px 12px rgba(0,0,0,.175));\n background-clip: padding-box;\n\n // Aligns the dropdown menu to right\n //\n // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n &.pull-right {\n right: 0;\n left: auto;\n }\n\n // Dividers (basically an hr) within the dropdown\n .divider {\n .nav-divider(@dropdown-divider-bg);\n }\n\n // Links within the dropdown menu\n > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: @line-height-base;\n color: @dropdown-link-color;\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n &:hover,\n &:focus {\n text-decoration: none;\n color: @dropdown-link-hover-color;\n background-color: @dropdown-link-hover-bg;\n }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-active-color;\n text-decoration: none;\n outline: 0;\n background-color: @dropdown-link-active-bg;\n }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-disabled-color;\n }\n\n // Nuke hover/focus effects\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none; // Remove CSS gradient\n .reset-filter();\n cursor: @cursor-disabled;\n }\n}\n\n// Open state for the dropdown\n.open {\n // Show the menu\n > .dropdown-menu {\n display: block;\n }\n\n // Remove the outline when :focus is triggered\n > a {\n outline: 0;\n }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n left: auto; // Reset the default from `.dropdown-menu`\n right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: @font-size-small;\n line-height: @line-height-base;\n color: @dropdown-header-color;\n white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n // Reverse the caret\n .caret {\n border-top: 0;\n border-bottom: @caret-width-base dashed;\n border-bottom: @caret-width-base solid ~\"\\9\"; // IE8\n content: \"\";\n }\n // Different positioning for bottom up menu\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-right {\n .dropdown-menu {\n .dropdown-menu-right();\n }\n // Necessary for overrides of the default right aligned menu.\n // Will remove come v4 in all likelihood.\n .dropdown-menu-left {\n .dropdown-menu-left();\n }\n }\n}\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; // match .btn alignment given font-size hack above\n > .btn {\n position: relative;\n float: left;\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active,\n &.active {\n z-index: 2;\n }\n }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n .btn + .btn,\n .btn + .btn-group,\n .btn-group + .btn,\n .btn-group + .btn-group {\n margin-left: -1px;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n margin-left: -5px; // Offset the first child's margin\n &:extend(.clearfix all);\n\n .btn,\n .btn-group,\n .input-group {\n float: left;\n }\n > .btn,\n > .btn-group,\n > .input-group {\n margin-left: 5px;\n }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n margin-left: 0;\n &:not(:last-child):not(.dropdown-toggle) {\n .border-right-radius(0);\n }\n}\n// Need .dropdown-toggle since :last-child doesn't apply, given that a .dropdown-menu is used immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-right-radius(0);\n }\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n .box-shadow(none);\n }\n}\n\n\n// Reposition the caret\n.btn .caret {\n margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n border-width: @caret-width-large @caret-width-large 0;\n border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n > .btn,\n > .btn-group,\n > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n }\n\n // Clear floats so dropdown menus can be properly placed\n > .btn-group {\n &:extend(.clearfix all);\n > .btn {\n float: none;\n }\n }\n\n > .btn + .btn,\n > .btn + .btn-group,\n > .btn-group + .btn,\n > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n }\n}\n\n.btn-group-vertical > .btn {\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n &:first-child:not(:last-child) {\n .border-top-radius(@btn-border-radius-base);\n .border-bottom-radius(0);\n }\n &:last-child:not(:first-child) {\n .border-top-radius(0);\n .border-bottom-radius(@btn-border-radius-base);\n }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-bottom-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-top-radius(0);\n}\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n > .btn,\n > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n }\n > .btn-group .btn {\n width: 100%;\n }\n\n > .btn-group .dropdown-menu {\n left: auto;\n }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `clip`. We cannot use\n// `display: none;` or `visibility: hidden;` as that also hides the popover.\n// Simply visually hiding the inputs via `opacity` would leave them clickable in\n// certain cases which is prevented by using `clip` and `pointer-events`.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 and\n// https://github.com/twbs/bootstrap/pull/14559 for more information.\n\n[data-toggle=\"buttons\"] {\n > .btn,\n > .btn-group > .btn {\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0,0,0,0);\n pointer-events: none;\n }\n }\n}\n","// Single side border-radius\n\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\n}\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n position: relative; // For dropdowns\n display: table;\n border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n // Undo padding and float of grid classes\n &[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n }\n\n .form-control {\n // Ensure that the input is always above the *appended* addon button for\n // proper border colors.\n position: relative;\n z-index: 2;\n\n // IE9 fubars the placeholder attribute in text inputs and the arrows on\n // select elements in input groups. To fix it, we float the input. Details:\n // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n float: left;\n\n width: 100%;\n margin-bottom: 0;\n\n &:focus {\n z-index: 3;\n }\n }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n .input-lg();\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n .input-sm();\n}\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 1;\n color: @input-color;\n text-align: center;\n background-color: @input-group-addon-bg;\n border: 1px solid @input-group-addon-border-color;\n border-radius: @input-border-radius;\n\n // Sizing\n &.input-sm {\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n border-radius: @input-border-radius-small;\n }\n &.input-lg {\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n border-radius: @input-border-radius-large;\n }\n\n // Nuke default margins from checkboxes and radios to vertically center within.\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n margin-top: 0;\n }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n .border-right-radius(0);\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n .border-left-radius(0);\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n position: relative;\n // Jankily prevent input button groups from wrapping with `white-space` and\n // `font-size` in combination with `inline-block` on buttons.\n font-size: 0;\n white-space: nowrap;\n\n // Negative margin for spacing, position for bringing hovered/focused/actived\n // element above the siblings.\n > .btn {\n position: relative;\n + .btn {\n margin-left: -1px;\n }\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active {\n z-index: 2;\n }\n }\n\n // Negative margin to only have a 1px border between the two\n &:first-child {\n > .btn,\n > .btn-group {\n margin-right: -1px;\n }\n }\n &:last-child {\n > .btn,\n > .btn-group {\n z-index: 2;\n margin-left: -1px;\n }\n }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n margin-bottom: 0;\n padding-left: 0; // Override default ul/ol\n list-style: none;\n &:extend(.clearfix all);\n\n > li {\n position: relative;\n display: block;\n\n > a {\n position: relative;\n display: block;\n padding: @nav-link-padding;\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: @nav-link-hover-bg;\n }\n }\n\n // Disabled state sets text to gray and nukes hover/tab effects\n &.disabled > a {\n color: @nav-disabled-link-color;\n\n &:hover,\n &:focus {\n color: @nav-disabled-link-hover-color;\n text-decoration: none;\n background-color: transparent;\n cursor: @cursor-disabled;\n }\n }\n }\n\n // Open dropdowns\n .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @nav-link-hover-bg;\n border-color: @link-color;\n }\n }\n\n // Nav dividers (deprecated with v3.0.1)\n //\n // This should have been removed in v3 with the dropping of `.nav-list`, but\n // we missed it. We don't currently support this anywhere, but in the interest\n // of maintaining backward compatibility in case you use it, it's deprecated.\n .nav-divider {\n .nav-divider();\n }\n\n // Prevent IE8 from misplacing imgs\n //\n // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n > li > a > img {\n max-width: none;\n }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n border-bottom: 1px solid @nav-tabs-border-color;\n > li {\n float: left;\n // Make the list-items overlay the bottom border\n margin-bottom: -1px;\n\n // Actual tabs (as links)\n > a {\n margin-right: 2px;\n line-height: @line-height-base;\n border: 1px solid transparent;\n border-radius: @border-radius-base @border-radius-base 0 0;\n &:hover {\n border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n }\n }\n\n // Active state, and its :hover to override normal :hover\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-tabs-active-link-hover-color;\n background-color: @nav-tabs-active-link-hover-bg;\n border: 1px solid @nav-tabs-active-link-hover-border-color;\n border-bottom-color: transparent;\n cursor: default;\n }\n }\n }\n // pulling this in mainly for less shorthand\n &.nav-justified {\n .nav-justified();\n .nav-tabs-justified();\n }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n > li {\n float: left;\n\n // Links rendered as pills\n > a {\n border-radius: @nav-pills-border-radius;\n }\n + li {\n margin-left: 2px;\n }\n\n // Active state\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-pills-active-link-hover-color;\n background-color: @nav-pills-active-link-hover-bg;\n }\n }\n }\n}\n\n\n// Stacked pills\n.nav-stacked {\n > li {\n float: none;\n + li {\n margin-top: 2px;\n margin-left: 0; // no need for this gap between nav items\n }\n }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n width: 100%;\n\n > li {\n float: none;\n > a {\n text-align: center;\n margin-bottom: 5px;\n }\n }\n\n > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n }\n\n @media (min-width: @screen-sm-min) {\n > li {\n display: table-cell;\n width: 1%;\n > a {\n margin-bottom: 0;\n }\n }\n }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n border-bottom: 0;\n\n > li > a {\n // Override margin from .nav-tabs\n margin-right: 0;\n border-radius: @border-radius-base;\n }\n\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border: 1px solid @nav-tabs-justified-link-border-color;\n }\n\n @media (min-width: @screen-sm-min) {\n > li > a {\n border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n border-radius: @border-radius-base @border-radius-base 0 0;\n }\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border-bottom-color: @nav-tabs-justified-active-link-border-color;\n }\n }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n // make dropdown border overlap tab border\n margin-top: -1px;\n // Remove the top rounded corners here since there is a hard edge above the menu\n .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n position: relative;\n min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n margin-bottom: @navbar-margin-bottom;\n border: 1px solid transparent;\n\n // Prevent floats from breaking the navbar\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: @navbar-border-radius;\n }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n overflow-x: visible;\n padding-right: @navbar-padding-horizontal;\n padding-left: @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n &:extend(.clearfix all);\n -webkit-overflow-scrolling: touch;\n\n &.in {\n overflow-y: auto;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border-top: 0;\n box-shadow: none;\n\n &.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0; // Override default setting\n overflow: visible !important;\n }\n\n &.in {\n overflow-y: visible;\n }\n\n // Undo the collapse side padding for navbars with containers to ensure\n // alignment of right-aligned contents.\n .navbar-fixed-top &,\n .navbar-static-top &,\n .navbar-fixed-bottom & {\n padding-left: 0;\n padding-right: 0;\n }\n }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n .navbar-collapse {\n max-height: @navbar-collapse-max-height;\n\n @media (max-device-width: @screen-xs-min) and (orientation: landscape) {\n max-height: 200px;\n }\n }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n > .navbar-header,\n > .navbar-collapse {\n margin-right: -@navbar-padding-horizontal;\n margin-left: -@navbar-padding-horizontal;\n\n @media (min-width: @grid-float-breakpoint) {\n margin-right: 0;\n margin-left: 0;\n }\n }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n z-index: @zindex-navbar;\n border-width: 0 0 1px;\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: @zindex-navbar-fixed;\n\n // Undo the rounded corners\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0; // override .navbar defaults\n border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n float: left;\n padding: @navbar-padding-vertical @navbar-padding-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-computed;\n height: @navbar-height;\n\n &:hover,\n &:focus {\n text-decoration: none;\n }\n\n > img {\n display: block;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n .navbar > .container &,\n .navbar > .container-fluid & {\n margin-left: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: @navbar-padding-horizontal;\n padding: 9px 10px;\n .navbar-vertical-align(34px);\n background-color: transparent;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n border-radius: @border-radius-base;\n\n // We remove the `outline` here, but later compensate by attaching `:hover`\n // styles to `:focus`.\n &:focus {\n outline: 0;\n }\n\n // Bars\n .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n }\n .icon-bar + .icon-bar {\n margin-top: 4px;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n display: none;\n }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: @line-height-computed;\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n > li > a,\n .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n > li > a {\n line-height: @line-height-computed;\n &:hover,\n &:focus {\n background-image: none;\n }\n }\n }\n }\n\n // Uncollapse the nav\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin: 0;\n\n > li {\n float: left;\n > a {\n padding-top: @navbar-padding-vertical;\n padding-bottom: @navbar-padding-vertical;\n }\n }\n }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n margin-left: -@navbar-padding-horizontal;\n margin-right: -@navbar-padding-horizontal;\n padding: 10px @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n\n // Mixin behavior for optimum display\n .form-inline();\n\n .form-group {\n @media (max-width: @grid-float-breakpoint-max) {\n margin-bottom: 5px;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n }\n\n // Vertically center in expanded, horizontal navbar\n .navbar-vertical-align(@input-height-base);\n\n // Undo 100% width for pull classes\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n .box-shadow(none);\n }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n .border-top-radius(@navbar-border-radius);\n .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n .navbar-vertical-align(@input-height-base);\n\n &.btn-sm {\n .navbar-vertical-align(@input-height-small);\n }\n &.btn-xs {\n .navbar-vertical-align(22);\n }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n .navbar-vertical-align(@line-height-computed);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin-left: @navbar-padding-horizontal;\n margin-right: @navbar-padding-horizontal;\n }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n//\n// Declared after the navbar components to ensure more specificity on the margins.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-left { .pull-left(); }\n .navbar-right {\n .pull-right();\n margin-right: -@navbar-padding-horizontal;\n\n ~ .navbar-right {\n margin-right: 0;\n }\n }\n}\n\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n background-color: @navbar-default-bg;\n border-color: @navbar-default-border;\n\n .navbar-brand {\n color: @navbar-default-brand-color;\n &:hover,\n &:focus {\n color: @navbar-default-brand-hover-color;\n background-color: @navbar-default-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-default-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-default-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n\n .navbar-toggle {\n border-color: @navbar-default-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-default-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-default-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: @navbar-default-border;\n }\n\n // Dropdown menu items\n .navbar-nav {\n // Remove background color from open dropdown\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-default-link-active-bg;\n color: @navbar-default-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n > li > a {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n }\n }\n\n\n // Links in navbars\n //\n // Add a class to ensure links outside the navbar nav are colored correctly.\n\n .navbar-link {\n color: @navbar-default-link-color;\n &:hover {\n color: @navbar-default-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n }\n }\n }\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n background-color: @navbar-inverse-bg;\n border-color: @navbar-inverse-border;\n\n .navbar-brand {\n color: @navbar-inverse-brand-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-brand-hover-color;\n background-color: @navbar-inverse-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-inverse-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-inverse-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n\n // Darken the responsive nav toggle\n .navbar-toggle {\n border-color: @navbar-inverse-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-inverse-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-inverse-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: darken(@navbar-inverse-bg, 7%);\n }\n\n // Dropdowns\n .navbar-nav {\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-inverse-link-active-bg;\n color: @navbar-inverse-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display\n .open .dropdown-menu {\n > .dropdown-header {\n border-color: @navbar-inverse-border;\n }\n .divider {\n background-color: @navbar-inverse-border;\n }\n > li > a {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n }\n }\n\n .navbar-link {\n color: @navbar-inverse-link-color;\n &:hover {\n color: @navbar-inverse-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n }\n }\n }\n}\n","// Navbar vertical align\n//\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n .clearfix();\n}\n.center-block {\n .center-block();\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n display: none !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n position: fixed;\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n margin-bottom: @line-height-computed;\n list-style: none;\n background-color: @breadcrumb-bg;\n border-radius: @border-radius-base;\n\n > li {\n display: inline-block;\n\n + li:before {\n content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n padding: 0 5px;\n color: @breadcrumb-color;\n }\n }\n\n > .active {\n color: @breadcrumb-active-color;\n }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: @line-height-computed 0;\n border-radius: @border-radius-base;\n\n > li {\n display: inline; // Remove list-style and block-level defaults\n > a,\n > span {\n position: relative;\n float: left; // Collapse white-space\n padding: @padding-base-vertical @padding-base-horizontal;\n line-height: @line-height-base;\n text-decoration: none;\n color: @pagination-color;\n background-color: @pagination-bg;\n border: 1px solid @pagination-border;\n margin-left: -1px;\n }\n &:first-child {\n > a,\n > span {\n margin-left: 0;\n .border-left-radius(@border-radius-base);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius-base);\n }\n }\n }\n\n > li > a,\n > li > span {\n &:hover,\n &:focus {\n z-index: 2;\n color: @pagination-hover-color;\n background-color: @pagination-hover-bg;\n border-color: @pagination-hover-border;\n }\n }\n\n > .active > a,\n > .active > span {\n &,\n &:hover,\n &:focus {\n z-index: 3;\n color: @pagination-active-color;\n background-color: @pagination-active-bg;\n border-color: @pagination-active-border;\n cursor: default;\n }\n }\n\n > .disabled {\n > span,\n > span:hover,\n > span:focus,\n > a,\n > a:hover,\n > a:focus {\n color: @pagination-disabled-color;\n background-color: @pagination-disabled-bg;\n border-color: @pagination-disabled-border;\n cursor: @cursor-disabled;\n }\n }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n","// Pagination\n\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n padding-left: 0;\n margin: @line-height-computed 0;\n list-style: none;\n text-align: center;\n &:extend(.clearfix all);\n li {\n display: inline;\n > a,\n > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: @pager-bg;\n border: 1px solid @pager-border;\n border-radius: @pager-border-radius;\n }\n\n > a:hover,\n > a:focus {\n text-decoration: none;\n background-color: @pager-hover-bg;\n }\n }\n\n .next {\n > a,\n > span {\n float: right;\n }\n }\n\n .previous {\n > a,\n > span {\n float: left;\n }\n }\n\n .disabled {\n > a,\n > a:hover,\n > a:focus,\n > span {\n color: @pager-disabled-color;\n background-color: @pager-bg;\n cursor: @cursor-disabled;\n }\n }\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: @label-color;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n\n // Add hover effects, but only for links\n a& {\n &:hover,\n &:focus {\n color: @label-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Empty labels collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for labels in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n .label-variant(@label-default-bg);\n}\n\n.label-primary {\n .label-variant(@label-primary-bg);\n}\n\n.label-success {\n .label-variant(@label-success-bg);\n}\n\n.label-info {\n .label-variant(@label-info-bg);\n}\n\n.label-warning {\n .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n .label-variant(@label-danger-bg);\n}\n","// Labels\n\n.label-variant(@color) {\n background-color: @color;\n\n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: @font-size-small;\n font-weight: @badge-font-weight;\n color: @badge-color;\n line-height: @badge-line-height;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: @badge-bg;\n border-radius: @badge-border-radius;\n\n // Empty badges collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for badges in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n\n .btn-xs &,\n .btn-group-xs > .btn & {\n top: 0;\n padding: 1px 5px;\n }\n\n // Hover state, but only for links\n a& {\n &:hover,\n &:focus {\n color: @badge-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Account for badges in navs\n .list-group-item.active > &,\n .nav-pills > .active > a > & {\n color: @badge-active-color;\n background-color: @badge-active-bg;\n }\n\n .list-group-item > & {\n float: right;\n }\n\n .list-group-item > & + & {\n margin-right: 5px;\n }\n\n .nav-pills > li > a > & {\n margin-left: 3px;\n }\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n padding-top: @jumbotron-padding;\n padding-bottom: @jumbotron-padding;\n margin-bottom: @jumbotron-padding;\n color: @jumbotron-color;\n background-color: @jumbotron-bg;\n\n h1,\n .h1 {\n color: @jumbotron-heading-color;\n }\n\n p {\n margin-bottom: (@jumbotron-padding / 2);\n font-size: @jumbotron-font-size;\n font-weight: 200;\n }\n\n > hr {\n border-top-color: darken(@jumbotron-bg, 10%);\n }\n\n .container &,\n .container-fluid & {\n border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n\n .container {\n max-width: 100%;\n }\n\n @media screen and (min-width: @screen-sm-min) {\n padding-top: (@jumbotron-padding * 1.6);\n padding-bottom: (@jumbotron-padding * 1.6);\n\n .container &,\n .container-fluid & {\n padding-left: (@jumbotron-padding * 2);\n padding-right: (@jumbotron-padding * 2);\n }\n\n h1,\n .h1 {\n font-size: @jumbotron-heading-font-size;\n }\n }\n}\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n display: block;\n padding: @thumbnail-padding;\n margin-bottom: @line-height-computed;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(border .2s ease-in-out);\n\n > img,\n a > img {\n &:extend(.img-responsive);\n margin-left: auto;\n margin-right: auto;\n }\n\n // Add a hover state for linked versions only\n a&:hover,\n a&:focus,\n a&.active {\n border-color: @link-color;\n }\n\n // Image captions\n .caption {\n padding: @thumbnail-caption-padding;\n color: @thumbnail-caption-color;\n }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n padding: @alert-padding;\n margin-bottom: @line-height-computed;\n border: 1px solid transparent;\n border-radius: @alert-border-radius;\n\n // Headings for larger alerts\n h4 {\n margin-top: 0;\n // Specified for the h4 to prevent conflicts of changing @headings-color\n color: inherit;\n }\n\n // Provide class for links that match alerts\n .alert-link {\n font-weight: @alert-link-font-weight;\n }\n\n // Improve alignment and spacing of inner content\n > p,\n > ul {\n margin-bottom: 0;\n }\n\n > p + p {\n margin-top: 5px;\n }\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.\n.alert-dismissible {\n padding-right: (@alert-padding + 20);\n\n // Adjust close link position\n .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n\n.alert-info {\n .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n\n.alert-warning {\n .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n\n.alert-danger {\n .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","// Alerts\n\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\n }\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n overflow: hidden;\n height: @line-height-computed;\n margin-bottom: @line-height-computed;\n background-color: @progress-bg;\n border-radius: @progress-border-radius;\n .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: @font-size-small;\n line-height: @line-height-computed;\n color: @progress-bar-color;\n text-align: center;\n background-color: @progress-bar-bg;\n .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n .transition(width .6s ease);\n}\n\n// Striped bars\n//\n// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar-striped` class, which you just add to an existing\n// `.progress-bar`.\n.progress-striped .progress-bar,\n.progress-bar-striped {\n #gradient > .striped();\n background-size: 40px 40px;\n}\n\n// Call animation for the active one\n//\n// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar.active` approach.\n.progress.active .progress-bar,\n.progress-bar.active {\n .animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Progress bars\n\n.progress-bar-variant(@color) {\n background-color: @color;\n\n // Deprecated parent class requirement as of v3.2.0\n .progress-striped & {\n #gradient > .striped();\n }\n}\n",".media {\n // Proper spacing between instances of .media\n margin-top: 15px;\n\n &:first-child {\n margin-top: 0;\n }\n}\n\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n\n.media-body {\n width: 10000px;\n}\n\n.media-object {\n display: block;\n\n // Fix collapse in webkit from max-width: 100% and display: table-cell.\n &.img-thumbnail {\n max-width: none;\n }\n}\n\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n\n.media-middle {\n vertical-align: middle;\n}\n\n.media-bottom {\n vertical-align: bottom;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n\n// Media list variation\n//\n// Undo default ul/ol styles\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on <ul>, <ol>, or <div>.\n\n.list-group {\n // No need to set list-style: none; since .list-group-item is block level\n margin-bottom: 20px;\n padding-left: 0; // reset padding because ul and ol\n}\n\n\n// Individual list items\n//\n// Use on `li`s or `div`s within the `.list-group` parent.\n\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n // Place the border on the list items and negative margin up for better styling\n margin-bottom: -1px;\n background-color: @list-group-bg;\n border: 1px solid @list-group-border;\n\n // Round the first and last items\n &:first-child {\n .border-top-radius(@list-group-border-radius);\n }\n &:last-child {\n margin-bottom: 0;\n .border-bottom-radius(@list-group-border-radius);\n }\n}\n\n\n// Interactive list items\n//\n// Use anchor or button elements instead of `li`s or `div`s to create interactive items.\n// Includes an extra `.active` modifier class for showing selected items.\n\na.list-group-item,\nbutton.list-group-item {\n color: @list-group-link-color;\n\n .list-group-item-heading {\n color: @list-group-link-heading-color;\n }\n\n // Hover state\n &:hover,\n &:focus {\n text-decoration: none;\n color: @list-group-link-hover-color;\n background-color: @list-group-hover-bg;\n }\n}\n\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n\n.list-group-item {\n // Disabled state\n &.disabled,\n &.disabled:hover,\n &.disabled:focus {\n background-color: @list-group-disabled-bg;\n color: @list-group-disabled-color;\n cursor: @cursor-disabled;\n\n // Force color to inherit for custom content\n .list-group-item-heading {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-disabled-text-color;\n }\n }\n\n // Active class on item itself, not parent\n &.active,\n &.active:hover,\n &.active:focus {\n z-index: 2; // Place active items above their siblings for proper border styling\n color: @list-group-active-color;\n background-color: @list-group-active-bg;\n border-color: @list-group-active-border;\n\n // Force color to inherit for custom content\n .list-group-item-heading,\n .list-group-item-heading > small,\n .list-group-item-heading > .small {\n color: inherit;\n }\n .list-group-item-text {\n color: @list-group-active-text-color;\n }\n }\n}\n\n\n// Contextual variants\n//\n// Add modifier classes to change text and background color on individual items.\n// Organizationally, this must come after the `:hover` states.\n\n.list-group-item-variant(success; @state-success-bg; @state-success-text);\n.list-group-item-variant(info; @state-info-bg; @state-info-text);\n.list-group-item-variant(warning; @state-warning-bg; @state-warning-text);\n.list-group-item-variant(danger; @state-danger-bg; @state-danger-text);\n\n\n// Custom content options\n//\n// Extra classes for creating well-formatted content within `.list-group-item`s.\n\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n","// List Groups\n\n.list-group-item-variant(@state; @background; @color) {\n .list-group-item-@{state} {\n color: @color;\n background-color: @background;\n\n a&,\n button& {\n color: @color;\n\n .list-group-item-heading {\n color: inherit;\n }\n\n &:hover,\n &:focus {\n color: @color;\n background-color: darken(@background, 5%);\n }\n &.active,\n &.active:hover,\n &.active:focus {\n color: #fff;\n background-color: @color;\n border-color: @color;\n }\n }\n }\n}\n","//\n// Panels\n// --------------------------------------------------\n\n\n// Base class\n.panel {\n margin-bottom: @line-height-computed;\n background-color: @panel-bg;\n border: 1px solid transparent;\n border-radius: @panel-border-radius;\n .box-shadow(0 1px 1px rgba(0,0,0,.05));\n}\n\n// Panel contents\n.panel-body {\n padding: @panel-body-padding;\n &:extend(.clearfix all);\n}\n\n// Optional heading\n.panel-heading {\n padding: @panel-heading-padding;\n border-bottom: 1px solid transparent;\n .border-top-radius((@panel-border-radius - 1));\n\n > .dropdown .dropdown-toggle {\n color: inherit;\n }\n}\n\n// Within heading, strip any `h*` tag of its default margins for spacing.\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: ceil((@font-size-base * 1.125));\n color: inherit;\n\n > a,\n > small,\n > .small,\n > small > a,\n > .small > a {\n color: inherit;\n }\n}\n\n// Optional footer (stays gray in every modifier class)\n.panel-footer {\n padding: @panel-footer-padding;\n background-color: @panel-footer-bg;\n border-top: 1px solid @panel-inner-border;\n .border-bottom-radius((@panel-border-radius - 1));\n}\n\n\n// List groups in panels\n//\n// By default, space out list group content from panel headings to account for\n// any kind of custom content between the two.\n\n.panel {\n > .list-group,\n > .panel-collapse > .list-group {\n margin-bottom: 0;\n\n .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n }\n\n // Add border top radius for first one\n &:first-child {\n .list-group-item:first-child {\n border-top: 0;\n .border-top-radius((@panel-border-radius - 1));\n }\n }\n\n // Add border bottom radius for last one\n &:last-child {\n .list-group-item:last-child {\n border-bottom: 0;\n .border-bottom-radius((@panel-border-radius - 1));\n }\n }\n }\n > .panel-heading + .panel-collapse > .list-group {\n .list-group-item:first-child {\n .border-top-radius(0);\n }\n }\n}\n// Collapse space between when there's no additional content.\n.panel-heading + .list-group {\n .list-group-item:first-child {\n border-top-width: 0;\n }\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n\n// Tables in panels\n//\n// Place a non-bordered `.table` within a panel (not within a `.panel-body`) and\n// watch it go full width.\n\n.panel {\n > .table,\n > .table-responsive > .table,\n > .panel-collapse > .table {\n margin-bottom: 0;\n\n caption {\n padding-left: @panel-body-padding;\n padding-right: @panel-body-padding;\n }\n }\n // Add border top radius for first one\n > .table:first-child,\n > .table-responsive:first-child > .table:first-child {\n .border-top-radius((@panel-border-radius - 1));\n\n > thead:first-child,\n > tbody:first-child {\n > tr:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n border-top-right-radius: (@panel-border-radius - 1);\n\n td:first-child,\n th:first-child {\n border-top-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-top-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n // Add border bottom radius for last one\n > .table:last-child,\n > .table-responsive:last-child > .table:last-child {\n .border-bottom-radius((@panel-border-radius - 1));\n\n > tbody:last-child,\n > tfoot:last-child {\n > tr:last-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n border-bottom-right-radius: (@panel-border-radius - 1);\n\n td:first-child,\n th:first-child {\n border-bottom-left-radius: (@panel-border-radius - 1);\n }\n td:last-child,\n th:last-child {\n border-bottom-right-radius: (@panel-border-radius - 1);\n }\n }\n }\n }\n > .panel-body + .table,\n > .panel-body + .table-responsive,\n > .table + .panel-body,\n > .table-responsive + .panel-body {\n border-top: 1px solid @table-border-color;\n }\n > .table > tbody:first-child > tr:first-child th,\n > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n }\n > .table-bordered,\n > .table-responsive > .table-bordered {\n border: 0;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n > thead,\n > tbody {\n > tr:first-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n > tbody,\n > tfoot {\n > tr:last-child {\n > td,\n > th {\n border-bottom: 0;\n }\n }\n }\n }\n > .table-responsive {\n border: 0;\n margin-bottom: 0;\n }\n}\n\n\n// Collapsible panels (aka, accordion)\n//\n// Wrap a series of panels in `.panel-group` to turn them into an accordion with\n// the help of our collapse JavaScript plugin.\n\n.panel-group {\n margin-bottom: @line-height-computed;\n\n // Tighten up margin so it's only between panels\n .panel {\n margin-bottom: 0;\n border-radius: @panel-border-radius;\n\n + .panel {\n margin-top: 5px;\n }\n }\n\n .panel-heading {\n border-bottom: 0;\n\n + .panel-collapse > .panel-body,\n + .panel-collapse > .list-group {\n border-top: 1px solid @panel-inner-border;\n }\n }\n\n .panel-footer {\n border-top: 0;\n + .panel-collapse .panel-body {\n border-bottom: 1px solid @panel-inner-border;\n }\n }\n}\n\n\n// Contextual variations\n.panel-default {\n .panel-variant(@panel-default-border; @panel-default-text; @panel-default-heading-bg; @panel-default-border);\n}\n.panel-primary {\n .panel-variant(@panel-primary-border; @panel-primary-text; @panel-primary-heading-bg; @panel-primary-border);\n}\n.panel-success {\n .panel-variant(@panel-success-border; @panel-success-text; @panel-success-heading-bg; @panel-success-border);\n}\n.panel-info {\n .panel-variant(@panel-info-border; @panel-info-text; @panel-info-heading-bg; @panel-info-border);\n}\n.panel-warning {\n .panel-variant(@panel-warning-border; @panel-warning-text; @panel-warning-heading-bg; @panel-warning-border);\n}\n.panel-danger {\n .panel-variant(@panel-danger-border; @panel-danger-text; @panel-danger-heading-bg; @panel-danger-border);\n}\n","// Panels\n\n.panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) {\n border-color: @border;\n\n & > .panel-heading {\n color: @heading-text-color;\n background-color: @heading-bg-color;\n border-color: @heading-border;\n\n + .panel-collapse > .panel-body {\n border-top-color: @border;\n }\n .badge {\n color: @heading-bg-color;\n background-color: @heading-text-color;\n }\n }\n & > .panel-footer {\n + .panel-collapse > .panel-body {\n border-bottom-color: @border;\n }\n }\n}\n","// Embeds responsive\n//\n// Credit: Nicolas Gallagher and SUIT CSS.\n\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n\n .embed-responsive-item,\n iframe,\n embed,\n object,\n video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n }\n}\n\n// Modifier class for 16:9 aspect ratio\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n\n// Modifier class for 4:3 aspect ratio\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n","//\n// Wells\n// --------------------------------------------------\n\n\n// Base class\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: @well-bg;\n border: 1px solid @well-border;\n border-radius: @border-radius-base;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.05));\n blockquote {\n border-color: #ddd;\n border-color: rgba(0,0,0,.15);\n }\n}\n\n// Sizes\n.well-lg {\n padding: 24px;\n border-radius: @border-radius-large;\n}\n.well-sm {\n padding: 9px;\n border-radius: @border-radius-small;\n}\n","//\n// Close icons\n// --------------------------------------------------\n\n\n.close {\n float: right;\n font-size: (@font-size-base * 1.5);\n font-weight: @close-font-weight;\n line-height: 1;\n color: @close-color;\n text-shadow: @close-text-shadow;\n .opacity(.2);\n\n &:hover,\n &:focus {\n color: @close-color;\n text-decoration: none;\n cursor: pointer;\n .opacity(.5);\n }\n\n // Additional properties for button version\n // iOS requires the button element instead of an anchor tag.\n // If you want the anchor version, it requires `href=\"#\"`.\n // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n button& {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n }\n}\n","//\n// Modals\n// --------------------------------------------------\n\n// .modal-open - body class for killing the scroll\n// .modal - container to scroll within\n// .modal-dialog - positioning shell for the actual modal\n// .modal-content - actual modal w/ bg and corners and shit\n\n// Kill the scroll on the body\n.modal-open {\n overflow: hidden;\n}\n\n// Container that the modal scrolls within\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal;\n -webkit-overflow-scrolling: touch;\n\n // Prevent Chrome on Windows from adding a focus outline. For details, see\n // https://github.com/twbs/bootstrap/pull/10951.\n outline: 0;\n\n // When fading in the modal, animate it to slide down\n &.fade .modal-dialog {\n .translate(0, -25%);\n .transition-transform(~\"0.3s ease-out\");\n }\n &.in .modal-dialog { .translate(0, 0) }\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n\n// Shell div to position the modal with bottom padding\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n\n// Actual modal\n.modal-content {\n position: relative;\n background-color: @modal-content-bg;\n border: 1px solid @modal-content-fallback-border-color; //old browsers fallback (ie8 etc)\n border: 1px solid @modal-content-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 3px 9px rgba(0,0,0,.5));\n background-clip: padding-box;\n // Remove focus outline from opened modal\n outline: 0;\n}\n\n// Modal background\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal-background;\n background-color: @modal-backdrop-bg;\n // Fade for backdrop\n &.fade { .opacity(0); }\n &.in { .opacity(@modal-backdrop-opacity); }\n}\n\n// Modal header\n// Top section of the modal w/ title and dismiss\n.modal-header {\n padding: @modal-title-padding;\n border-bottom: 1px solid @modal-header-border-color;\n &:extend(.clearfix all);\n}\n// Close icon\n.modal-header .close {\n margin-top: -2px;\n}\n\n// Title text within header\n.modal-title {\n margin: 0;\n line-height: @modal-title-line-height;\n}\n\n// Modal body\n// Where all modal content resides (sibling of .modal-header and .modal-footer)\n.modal-body {\n position: relative;\n padding: @modal-inner-padding;\n}\n\n// Footer (for actions)\n.modal-footer {\n padding: @modal-inner-padding;\n text-align: right; // right align buttons\n border-top: 1px solid @modal-footer-border-color;\n &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons\n\n // Properly space out buttons\n .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0; // account for input[type=\"submit\"] which gets the bottom margin like all other inputs\n }\n // but override that for button groups\n .btn-group .btn + .btn {\n margin-left: -1px;\n }\n // and override it for block buttons as well\n .btn-block + .btn-block {\n margin-left: 0;\n }\n}\n\n// Measure scrollbar width for padding body during modal show/hide\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n\n// Scale up the modal\n@media (min-width: @screen-sm-min) {\n // Automatically set modal's width for larger viewports\n .modal-dialog {\n width: @modal-md;\n margin: 30px auto;\n }\n .modal-content {\n .box-shadow(0 5px 15px rgba(0,0,0,.5));\n }\n\n // Modal sizes\n .modal-sm { width: @modal-sm; }\n}\n\n@media (min-width: @screen-md-min) {\n .modal-lg { width: @modal-lg; }\n}\n","//\n// Tooltips\n// --------------------------------------------------\n\n\n// Base class\n.tooltip {\n position: absolute;\n z-index: @zindex-tooltip;\n display: block;\n // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n .reset-text();\n font-size: @font-size-small;\n\n .opacity(0);\n\n &.in { .opacity(@tooltip-opacity); }\n &.top { margin-top: -3px; padding: @tooltip-arrow-width 0; }\n &.right { margin-left: 3px; padding: 0 @tooltip-arrow-width; }\n &.bottom { margin-top: 3px; padding: @tooltip-arrow-width 0; }\n &.left { margin-left: -3px; padding: 0 @tooltip-arrow-width; }\n}\n\n// Wrapper for the tooltip content\n.tooltip-inner {\n max-width: @tooltip-max-width;\n padding: 3px 8px;\n color: @tooltip-color;\n text-align: center;\n background-color: @tooltip-bg;\n border-radius: @border-radius-base;\n}\n\n// Arrows\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n// Note: Deprecated .top-left, .top-right, .bottom-left, and .bottom-right as of v3.3.1\n.tooltip {\n &.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-left .tooltip-arrow {\n bottom: 0;\n right: @tooltip-arrow-width;\n margin-bottom: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.top-right .tooltip-arrow {\n bottom: 0;\n left: @tooltip-arrow-width;\n margin-bottom: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width 0;\n border-top-color: @tooltip-arrow-color;\n }\n &.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0;\n border-right-color: @tooltip-arrow-color;\n }\n &.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -@tooltip-arrow-width;\n border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-left-color: @tooltip-arrow-color;\n }\n &.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-left .tooltip-arrow {\n top: 0;\n right: @tooltip-arrow-width;\n margin-top: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n &.bottom-right .tooltip-arrow {\n top: 0;\n left: @tooltip-arrow-width;\n margin-top: -@tooltip-arrow-width;\n border-width: 0 @tooltip-arrow-width @tooltip-arrow-width;\n border-bottom-color: @tooltip-arrow-color;\n }\n}\n",".reset-text() {\n font-family: @font-family-base;\n // We deliberately do NOT reset font-size.\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: @line-height-base;\n text-align: left; // Fallback for where `start` is not supported\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n}\n","//\n// Popovers\n// --------------------------------------------------\n\n\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: @zindex-popover;\n display: none;\n max-width: @popover-max-width;\n padding: 1px;\n // Our parent element can be arbitrary since popovers are by default inserted as a sibling of their target element.\n // So reset our font and text properties to avoid inheriting weird values.\n .reset-text();\n font-size: @font-size-base;\n\n background-color: @popover-bg;\n background-clip: padding-box;\n border: 1px solid @popover-fallback-border-color;\n border: 1px solid @popover-border-color;\n border-radius: @border-radius-large;\n .box-shadow(0 5px 10px rgba(0,0,0,.2));\n\n // Offset the popover to account for the popover arrow\n &.top { margin-top: -@popover-arrow-width; }\n &.right { margin-left: @popover-arrow-width; }\n &.bottom { margin-top: @popover-arrow-width; }\n &.left { margin-left: -@popover-arrow-width; }\n}\n\n.popover-title {\n margin: 0; // reset heading margin\n padding: 8px 14px;\n font-size: @font-size-base;\n background-color: @popover-title-bg;\n border-bottom: 1px solid darken(@popover-title-bg, 5%);\n border-radius: (@border-radius-large - 1) (@border-radius-large - 1) 0 0;\n}\n\n.popover-content {\n padding: 9px 14px;\n}\n\n// Arrows\n//\n// .arrow is outer, .arrow:after is inner\n\n.popover > .arrow {\n &,\n &:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n }\n}\n.popover > .arrow {\n border-width: @popover-arrow-outer-width;\n}\n.popover > .arrow:after {\n border-width: @popover-arrow-width;\n content: \"\";\n}\n\n.popover {\n &.top > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-top-color: @popover-arrow-outer-color;\n bottom: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n bottom: 1px;\n margin-left: -@popover-arrow-width;\n border-bottom-width: 0;\n border-top-color: @popover-arrow-color;\n }\n }\n &.right > .arrow {\n top: 50%;\n left: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-right-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n left: 1px;\n bottom: -@popover-arrow-width;\n border-left-width: 0;\n border-right-color: @popover-arrow-color;\n }\n }\n &.bottom > .arrow {\n left: 50%;\n margin-left: -@popover-arrow-outer-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-bottom-color: @popover-arrow-outer-color;\n top: -@popover-arrow-outer-width;\n &:after {\n content: \" \";\n top: 1px;\n margin-left: -@popover-arrow-width;\n border-top-width: 0;\n border-bottom-color: @popover-arrow-color;\n }\n }\n\n &.left > .arrow {\n top: 50%;\n right: -@popover-arrow-outer-width;\n margin-top: -@popover-arrow-outer-width;\n border-right-width: 0;\n border-left-color: @popover-arrow-outer-fallback-color; // IE8 fallback\n border-left-color: @popover-arrow-outer-color;\n &:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: @popover-arrow-color;\n bottom: -@popover-arrow-width;\n }\n }\n}\n","//\n// Carousel\n// --------------------------------------------------\n\n\n// Wrapper for the slide container and indicators\n.carousel {\n position: relative;\n}\n\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n\n > .item {\n display: none;\n position: relative;\n .transition(.6s ease-in-out left);\n\n // Account for jankitude on images\n > img,\n > a > img {\n &:extend(.img-responsive);\n line-height: 1;\n }\n\n // WebKit CSS3 transforms for supported devices\n @media all and (transform-3d), (-webkit-transform-3d) {\n .transition-transform(~'0.6s ease-in-out');\n .backface-visibility(~'hidden');\n .perspective(1000px);\n\n &.next,\n &.active.right {\n .translate3d(100%, 0, 0);\n left: 0;\n }\n &.prev,\n &.active.left {\n .translate3d(-100%, 0, 0);\n left: 0;\n }\n &.next.left,\n &.prev.right,\n &.active {\n .translate3d(0, 0, 0);\n left: 0;\n }\n }\n }\n\n > .active,\n > .next,\n > .prev {\n display: block;\n }\n\n > .active {\n left: 0;\n }\n\n > .next,\n > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n }\n\n > .next {\n left: 100%;\n }\n > .prev {\n left: -100%;\n }\n > .next.left,\n > .prev.right {\n left: 0;\n }\n\n > .active.left {\n left: -100%;\n }\n > .active.right {\n left: 100%;\n }\n\n}\n\n// Left/right controls for nav\n// ---------------------------\n\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: @carousel-control-width;\n .opacity(@carousel-control-opacity);\n font-size: @carousel-control-font-size;\n color: @carousel-control-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n background-color: rgba(0, 0, 0, 0); // Fix IE9 click-thru bug\n // We can't have this transition here because WebKit cancels the carousel\n // animation if you trip this while in the middle of another animation.\n\n // Set gradients for backgrounds\n &.left {\n #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));\n }\n &.right {\n left: auto;\n right: 0;\n #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));\n }\n\n // Hover/focus state\n &:hover,\n &:focus {\n outline: 0;\n color: @carousel-control-color;\n text-decoration: none;\n .opacity(.9);\n }\n\n // Toggles\n .icon-prev,\n .icon-next,\n .glyphicon-chevron-left,\n .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n margin-top: -10px;\n z-index: 5;\n display: inline-block;\n }\n .icon-prev,\n .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n }\n .icon-next,\n .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n }\n .icon-prev,\n .icon-next {\n width: 20px;\n height: 20px;\n line-height: 1;\n font-family: serif;\n }\n\n\n .icon-prev {\n &:before {\n content: '\\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)\n }\n }\n .icon-next {\n &:before {\n content: '\\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)\n }\n }\n}\n\n// Optional indicator pips\n//\n// Add an unordered list with the following class and add a list item for each\n// slide your carousel holds.\n\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n\n li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid @carousel-indicator-border-color;\n border-radius: 10px;\n cursor: pointer;\n\n // IE8-9 hack for event handling\n //\n // Internet Explorer 8-9 does not support clicks on elements without a set\n // `background-color`. We cannot use `filter` since that's not viewed as a\n // background color by the browser. Thus, a hack is needed.\n // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Internet_Explorer\n //\n // For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we\n // set alpha transparency for the best results possible.\n background-color: #000 \\9; // IE8\n background-color: rgba(0,0,0,0); // IE9\n }\n .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: @carousel-indicator-active-bg;\n }\n}\n\n// Optional captions\n// -----------------------------\n// Hidden by default for smaller viewports\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: @carousel-caption-color;\n text-align: center;\n text-shadow: @carousel-text-shadow;\n & .btn {\n text-shadow: none; // No shadow for button elements in carousel-caption\n }\n}\n\n\n// Scale up controls for tablets and up\n@media screen and (min-width: @screen-sm-min) {\n\n // Scale up the controls a smidge\n .carousel-control {\n .glyphicon-chevron-left,\n .glyphicon-chevron-right,\n .icon-prev,\n .icon-next {\n width: (@carousel-control-font-size * 1.5);\n height: (@carousel-control-font-size * 1.5);\n margin-top: (@carousel-control-font-size / -2);\n font-size: (@carousel-control-font-size * 1.5);\n }\n .glyphicon-chevron-left,\n .icon-prev {\n margin-left: (@carousel-control-font-size / -2);\n }\n .glyphicon-chevron-right,\n .icon-next {\n margin-right: (@carousel-control-font-size / -2);\n }\n }\n\n // Show and left align the captions\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n\n // Move up the indicators\n .carousel-indicators {\n bottom: 20px;\n }\n}\n","// Clearfix\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n// contenteditable attribute is included anywhere else in the document.\n// Otherwise it causes space to appear at the top and bottom of elements\n// that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n// `:before` to contain the top-margins of child elements.\n//\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n\n.clearfix() {\n &:before,\n &:after {\n content: \" \"; // 1\n display: table; // 2\n }\n &:after {\n clear: both;\n }\n}\n","// Center-align a block level element\n\n.center-block() {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n","// CSS image replacement\n//\n// Heads up! v3 launched with only `.hide-text()`, but per our pattern for\n// mixins being reused as classes with the same name, this doesn't hold up. As\n// of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`.\n//\n// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757\n\n// Deprecated as of v3.0.1 (has been removed in v4)\n.hide-text() {\n font: ~\"0/0\" a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n\n// New mixin to use as of v3.0.1\n.text-hide() {\n .hide-text();\n}\n","//\n// Responsive: Utility classes\n// --------------------------------------------------\n\n\n// IE10 in Windows (Phone) 8\n//\n// Support for responsive views via media queries is kind of borked in IE10, for\n// Surface/desktop in split view and for Windows Phone 8. This particular fix\n// must be accompanied by a snippet of JavaScript to sniff the user agent and\n// apply some conditional CSS to *only* the Surface/desktop Windows 8. Look at\n// our Getting Started page for more information on this bug.\n//\n// For more information, see the following:\n//\n// Issue: https://github.com/twbs/bootstrap/issues/10497\n// Docs: http://getbootstrap.com/getting-started/#support-ie10-width\n// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/\n// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/\n\n@-ms-viewport {\n width: device-width;\n}\n\n\n// Visibility utilities\n// Note: Deprecated .visible-xs, .visible-sm, .visible-md, and .visible-lg as of v3.2.0\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n .responsive-invisibility();\n}\n\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n\n.visible-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-visibility();\n }\n}\n.visible-xs-block {\n @media (max-width: @screen-xs-max) {\n display: block !important;\n }\n}\n.visible-xs-inline {\n @media (max-width: @screen-xs-max) {\n display: inline !important;\n }\n}\n.visible-xs-inline-block {\n @media (max-width: @screen-xs-max) {\n display: inline-block !important;\n }\n}\n\n.visible-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-visibility();\n }\n}\n.visible-sm-block {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: block !important;\n }\n}\n.visible-sm-inline {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: inline !important;\n }\n}\n.visible-sm-inline-block {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n display: inline-block !important;\n }\n}\n\n.visible-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-visibility();\n }\n}\n.visible-md-block {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: block !important;\n }\n}\n.visible-md-inline {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: inline !important;\n }\n}\n.visible-md-inline-block {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n display: inline-block !important;\n }\n}\n\n.visible-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-visibility();\n }\n}\n.visible-lg-block {\n @media (min-width: @screen-lg-min) {\n display: block !important;\n }\n}\n.visible-lg-inline {\n @media (min-width: @screen-lg-min) {\n display: inline !important;\n }\n}\n.visible-lg-inline-block {\n @media (min-width: @screen-lg-min) {\n display: inline-block !important;\n }\n}\n\n.hidden-xs {\n @media (max-width: @screen-xs-max) {\n .responsive-invisibility();\n }\n}\n.hidden-sm {\n @media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) {\n .responsive-invisibility();\n }\n}\n.hidden-md {\n @media (min-width: @screen-md-min) and (max-width: @screen-md-max) {\n .responsive-invisibility();\n }\n}\n.hidden-lg {\n @media (min-width: @screen-lg-min) {\n .responsive-invisibility();\n }\n}\n\n\n// Print utilities\n//\n// Media queries are placed on the inside to be mixin-friendly.\n\n// Note: Deprecated .visible-print as of v3.2.0\n.visible-print {\n .responsive-invisibility();\n\n @media print {\n .responsive-visibility();\n }\n}\n.visible-print-block {\n display: none !important;\n\n @media print {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n\n @media print {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n\n @media print {\n display: inline-block !important;\n }\n}\n\n.hidden-print {\n @media print {\n .responsive-invisibility();\n }\n}\n","// Responsive utilities\n\n//\n// More easily include all the states for responsive-utilities.less.\n.responsive-visibility() {\n display: block !important;\n table& { display: table !important; }\n tr& { display: table-row !important; }\n th&,\n td& { display: table-cell !important; }\n}\n\n.responsive-invisibility() {\n display: none !important;\n}\n"]}
\ No newline at end of file
diff --git a/GitCandy.Web/Content/highlight.css b/GitCandy.Web/Content/highlight.css
new file mode 100644
index 0000000..db366be
--- /dev/null
+++ b/GitCandy.Web/Content/highlight.css
@@ -0,0 +1,97 @@
+/*
+Docco style used in http://jashkenas.github.com/docco/ converted by Simon Madine (@thingsinjars)
+*/
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ padding: 0.5em;
+ color: #000;
+ background: #f8f8ff;
+}
+
+.hljs-comment,
+.hljs-quote {
+ color: #408080;
+ font-style: italic;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-literal,
+.hljs-subst {
+ color: #954121;
+}
+
+.hljs-number {
+ color: #40a070;
+}
+
+.hljs-string,
+.hljs-doctag {
+ color: #219161;
+}
+
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-section,
+.hljs-type {
+ color: #19469d;
+}
+
+.hljs-params {
+ color: #00f;
+}
+
+.hljs-title {
+ color: #458;
+ font-weight: bold;
+}
+
+.hljs-tag,
+.hljs-name,
+.hljs-attribute {
+ color: #000080;
+ font-weight: normal;
+}
+
+.hljs-variable,
+.hljs-template-variable {
+ color: #008080;
+}
+
+.hljs-regexp,
+.hljs-link {
+ color: #b68;
+}
+
+.hljs-symbol,
+.hljs-bullet {
+ color: #990073;
+}
+
+.hljs-built_in,
+.hljs-builtin-name {
+ color: #0086b3;
+}
+
+.hljs-meta {
+ color: #999;
+ font-weight: bold;
+}
+
+.hljs-deletion {
+ background: #fdd;
+}
+
+.hljs-addition {
+ background: #dfd;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
diff --git a/GitCandy.Web/Content/Site.css b/GitCandy.Web/Content/Site.css
new file mode 100644
index 0000000..9839d74
--- /dev/null
+++ b/GitCandy.Web/Content/Site.css
@@ -0,0 +1,156 @@
+.list-toolbar .btn-sm-force, .btn-toolbar .btn-sm-force {
+ height: 33px;
+ line-height: 0;
+ vertical-align: middle;
+}
+
+.list-toolbar .pull-right {
+ float: none;
+}
+
+/*.list-toolbar .clear-fix {
+ zoom: 1;
+ overflow:hidden;
+}*/
+
+/*.form-group {
+ height: 60px;
+}*/
+.input-group[class*=col-] {
+ float: left;
+}
+
+.input-group > .btn-group > .btn {
+ line-height: 20px;
+}
+
+
+.page-divider {
+ margin: 20px 0 10px 0;
+ border: 0;
+ border-top: 1px solid #eee;
+}
+
+.center {
+ display: table;
+ width: auto;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.border-area {
+ position: relative;
+ margin: 5px 0;
+ padding: 5px 10px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.remover {
+ position: absolute;
+ top: 7px;
+ right: 7px;
+}
+
+.disable-mask {
+ width: 100%;
+ height: 100%;
+ display: block;
+ opacity: 0.6;
+ position: absolute;
+ background: #999;
+ z-index: 1000;
+ top: -0.5px;
+}
+
+.alert_placeholder {
+ height: 45px;
+}
+
+.branch-selector {
+ max-height: 300px;
+ overflow: auto;
+}
+
+.keep-space {
+ margin-left: 10px;
+ margin-right: 10px;
+}
+
+.footer {
+ padding: 0 0 10px 0;
+}
+
+.git-text {
+ cursor: auto !important;
+}
+
+.blame-code {
+ margin: 0 !important;
+ padding: 0 !important;
+ border: none !important;
+ background: none;
+}
+
+.blame-info {
+ width: 300px;
+}
+
+.url-path {
+ width: 400px;
+}
+.url-path > input {
+ background: #fff !important;
+}
+
+[aria-label] {
+ position: relative;
+}
+ [aria-label]:after {
+ display: none;
+ position: absolute;
+ top: 100%;
+ right: 50%;
+ padding: 5px 8px;
+ border-radius: 3px;
+ background-color: rgba(0, 0, 0, 0.8);
+ color: #fff;
+ content: attr(aria-label);
+ margin-top: 7px;
+ font-size: 12px;
+ white-space: pre;
+ pointer-events: none;
+ transform: translateX(50%);
+ z-index: 10000;
+ }
+
+ [aria-label]:hover:after, [aria-label]:focus:after {
+ display: block;
+ }
+
+/* override bootstrap */
+@media print {
+ a[href]:after {
+ content: none !important;
+ }
+}
+
+.dl-horizontal dt { padding:5px 0; }
+.dl-horizontal dd { padding:5px 0; }
+
+@media (min-width: 768px) {
+ .dl-horizontal dt { width: 240px; }
+ .dl-horizontal dd { margin-left: 260px; }
+}
+@media (min-width: 470px) {
+ .nav-justified > li {
+ display: table-cell;
+ width: 1%;
+ }
+ .nav-justified > li > a {
+ margin-bottom: 0;
+ }
+}
diff --git a/GitCandy.Web/Controllers/AccountController.cs b/GitCandy.Web/Controllers/AccountController.cs
new file mode 100644
index 0000000..e88075d
--- /dev/null
+++ b/GitCandy.Web/Controllers/AccountController.cs
@@ -0,0 +1,266 @@
+using System;
+using System.Linq;
+using System.Net;
+using System.Web;
+using System.Web.Mvc;
+using GitCandy.App_GlobalResources;
+using GitCandy.Base;
+using GitCandy.Configuration;
+using GitCandy.Filters;
+using GitCandy.Models;
+using GitCandy.Security;
+using NewLife.Data;
+using NewLife.Log;
+using UserX = NewLife.GitCandy.Entity.User;
+
+namespace GitCandy.Controllers
+{
+ public class AccountController : CandyControllerBase
+ {
+ [Administrator]
+ public ActionResult Index(String query, int? page)
+ {
+ var model = MembershipService.GetUserList(query, page ?? 1, UserConfiguration.Current.PageSize);
+
+ ViewBag.Pager = Pager.Items(model.ItemCount)
+ .PerPage(UserConfiguration.Current.PageSize)
+ .Move(model.CurrentPage)
+ .Segment(5)
+ .Center();
+
+ return View(model);
+ }
+
+ [AllowAnonymous]
+ [AllowRegisterUser]
+ public ActionResult Create()
+ {
+ return View();
+ }
+
+ [HttpPost]
+ [AllowAnonymous]
+ [AllowRegisterUser]
+ public ActionResult Create(UserModel model)
+ {
+ if (ModelState.IsValid)
+ {
+ try
+ {
+ var user = UserX.Create(model.Name, model.Nickname, model.Password, model.Email, model.Description);
+ if (user != null)
+ {
+ if (Token != null) return RedirectToAction("Detail", "Account", new { name = user.Name });
+
+ var auth = MembershipService.CreateAuthorization(user.ID, Token.AuthorizationExpires, Request.UserHostAddress);
+ Token = new Token(auth.AuthCode, user.ID, user.Name, user.Nickname, user.IsAdmin);
+ return RedirectToStartPage();
+ }
+ }
+ catch (ArgumentException aex)
+ {
+ ModelState.AddModelError(aex.ParamName, aex.Message);
+ }
+ catch (Exception ex)
+ {
+ ModelState.AddModelError("", ex.Message);
+ }
+ }
+
+ return View(model);
+ }
+
+ public ActionResult Detail(String name)
+ {
+ if (String.IsNullOrEmpty(name) && Token != null)
+ name = Token.Username;
+
+ var model = MembershipService.GetUserModel(name, true, Token?.Username);
+ if (model == null)
+ throw new HttpException((int)HttpStatusCode.NotFound, String.Empty);
+ return View(model);
+ }
+
+ [AllowAnonymous]
+ public ActionResult Logout(String returnUrl)
+ {
+ Token = null;
+ return RedirectToStartPage(returnUrl);
+ }
+
+ [AllowAnonymous]
+ public ActionResult Login(String returnUrl)
+ {
+ if (Token != null)
+ return RedirectToStartPage(returnUrl);
+
+ ViewBag.ReturnUrl = returnUrl;
+ return View();
+ }
+
+ [HttpPost]
+ [AllowAnonymous]
+ public ActionResult Login(LoginModel model, String returnUrl)
+ {
+ var user = MembershipService.Login(model.ID, model.Password);
+ if (user != null)
+ {
+ var auth = MembershipService.CreateAuthorization(user.ID, Token.AuthorizationExpires, Request.UserHostAddress);
+ Token = new Token(auth.AuthCode, user.ID, user.Name, user.Nickname, user.IsAdmin);
+
+ return RedirectToStartPage(returnUrl);
+ }
+
+ ModelState.AddModelError("", SR.Account_LoginFailed);
+ ViewBag.ReturnUrl = returnUrl;
+ return View(model);
+ }
+
+ [CurrentUserOrAdministrator]
+ public ActionResult Change()
+ {
+ return View();
+ }
+
+ [HttpPost]
+ [CurrentUserOrAdministrator]
+ public ActionResult Change(ChangePasswordModel model, String name)
+ {
+ if (String.IsNullOrEmpty(name)) name = Token.Username;
+
+ var isAdmin = Token.IsSystemAdministrator && !String.Equals(name, Token.Username, StringComparison.OrdinalIgnoreCase);
+ if (ModelState.IsValid)
+ {
+ var user = UserX.Check(isAdmin ? Token.Username : name, model.OldPassword);
+ if (user != null)
+ {
+ MembershipService.SetPassword(name, model.NewPassword);
+ if (!isAdmin)
+ {
+ var auth = MembershipService.CreateAuthorization(user.ID, Token.AuthorizationExpires, Request.UserHostAddress);
+ Token = new Token(auth.AuthCode, user.ID, user.Name, user.Nickname, user.IsAdmin);
+ }
+
+ return RedirectToAction("Detail", "Account", new { name });
+ }
+ ModelState.AddModelError("OldPassword", SR.Account_OldPasswordError);
+ }
+ return View(model);
+ }
+
+ [AllowAnonymous]
+ public ActionResult Forgot()
+ {
+ return View();
+ }
+
+ [CurrentUserOrAdministrator]
+ public ActionResult Edit(String name)
+ {
+ if (String.IsNullOrEmpty(name))
+ name = Token.Username;
+
+ var model = MembershipService.GetUserModel(name);
+ if (model == null)
+ throw new HttpException((int)HttpStatusCode.NotFound, String.Empty);
+ ModelState.Clear();
+
+ return View(model);
+ }
+
+ [HttpPost]
+ [CurrentUserOrAdministrator]
+ public ActionResult Edit(String name, UserModel model)
+ {
+ if (String.IsNullOrEmpty(name)) name = Token.Username;
+
+ var isAdmin = Token.IsSystemAdministrator && !String.Equals(name, Token.Username, StringComparison.OrdinalIgnoreCase);
+
+ ModelState.Remove("ConformPassword");
+ if (ModelState.IsValid)
+ {
+ var user = UserX.Check(isAdmin ? Token.Username : name, model.Password);
+ if (user != null)
+ {
+ model.IsSystemAdministrator = Token.IsSystemAdministrator && model.IsSystemAdministrator;
+ if (!Token.IsSystemAdministrator || isAdmin || model.IsSystemAdministrator)
+ {
+ if (!MembershipService.UpdateUser(model))
+ throw new HttpException((int)HttpStatusCode.NotFound, String.Empty);
+ if (!isAdmin)
+ {
+ Token = MembershipService.GetToken(Token.AuthCode);
+ }
+
+ return RedirectToAction("Detail", "Account", new { name });
+ }
+ ModelState.AddModelError("IsSystemAdministrator", SR.Account_CantRemoveSelf);
+ }
+ else
+ ModelState.AddModelError("Password", SR.Account_PasswordError);
+ }
+ return View(model);
+ }
+
+ [HttpPost]
+ [CurrentUserOrAdministrator]
+ public JsonResult ChooseSsh(String user, String sshkey, String act)
+ {
+ String message = null;
+ if (act == "add")
+ {
+ var fingerprint = MembershipService.AddSshKey(user, sshkey);
+ if (fingerprint != null)
+ return Json(fingerprint);
+ }
+ else if (act == "del")
+ {
+ MembershipService.DeleteSshKey(user, sshkey);
+ return Json("success");
+ }
+
+ Response.StatusCode = 400;
+ return Json(message ?? SR.Shared_SomethingWrong);
+ }
+
+ [CurrentUserOrAdministrator]
+ public ActionResult Ssh(String name)
+ {
+ if (String.IsNullOrEmpty(name) && Token != null)
+ name = Token.Username;
+
+ var model = MembershipService.GetSshList(name);
+ if (model == null)
+ throw new HttpException((int)HttpStatusCode.NotFound, String.Empty);
+ return View(model);
+ }
+
+ [Administrator]
+ public ActionResult Delete(String name, String conform)
+ {
+ if (String.Equals(Token.Username, name, StringComparison.OrdinalIgnoreCase))
+ {
+ ModelState.AddModelError("", SR.Account_CantRemoveSelf);
+ }
+ else if (String.Equals(conform, "yes", StringComparison.OrdinalIgnoreCase))
+ {
+ MembershipService.DeleteUser(name);
+ XTrace.WriteLine("User {0} deleted by {1}#{2}", name, Token.Username, Token.UserID);
+ return RedirectToAction("Index");
+ }
+ return View((object)name);
+ }
+
+ [HttpPost]
+ public JsonResult Search(String query)
+ {
+ var p = new PageParameter();
+ p.PageSize = 20;
+
+ var list = UserX.SearchUser(query, p);
+ var ns = list.ToList().Select(e => e.Name).ToArray();
+
+ return Json(ns);
+ }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Controllers/CandyControllerBase.cs b/GitCandy.Web/Controllers/CandyControllerBase.cs
new file mode 100644
index 0000000..ddc5f78
--- /dev/null
+++ b/GitCandy.Web/Controllers/CandyControllerBase.cs
@@ -0,0 +1,173 @@
+using System;
+using System.Threading;
+using System.Web;
+using System.Web.Caching;
+using System.Web.Mvc;
+using GitCandy.Configuration;
+using GitCandy.Data;
+using GitCandy.Security;
+using NewLife.Log;
+
+namespace GitCandy.Controllers
+{
+ [AllowAnonymous]
+ public abstract class CandyControllerBase : Controller
+ {
+ private const String AuthKey = "_gc_auth";
+
+ private Token _token;
+
+ public MembershipService MembershipService { get; set; } = new MembershipService();
+
+ public Token Token
+ {
+ get
+ {
+ return _token;
+ }
+ set
+ {
+ if (value == null || value.Expired)
+ {
+ var cookie = new HttpCookie(AuthKey)
+ {
+ Expires = new DateTime(1980, 1, 1)
+ };
+
+ Response.Cookies.Set(cookie);
+
+ if (_token != null)
+ {
+ MembershipService.SetAuthorizationAsInvalid(_token.AuthCode);
+ RemoveCachedToken(_token.AuthCode.ToString());
+ _token = null;
+ }
+ if (value != null && value.Expired)
+ {
+ MembershipService.SetAuthorizationAsInvalid(value.AuthCode);
+ RemoveCachedToken(value.AuthCode.ToString());
+ }
+
+ Session.Abandon();
+ }
+ else
+ {
+ var bytes = value.AuthCode.ToByteArray();
+ var str = Convert.ToBase64String(bytes);
+
+ var cookie = new HttpCookie(AuthKey, str)
+ {
+ Expires = value.Expires,
+ HttpOnly = true,
+ };
+
+ Response.Cookies.Set(cookie);
+ }
+
+ _token = value;
+ Token.Current = value;
+ CacheToken(value);
+ }
+ }
+
+ protected override void OnAuthorization(AuthorizationContext filterContext)
+ {
+ try
+ {
+ var cookie = Request.Cookies[AuthKey];
+ if (cookie != null)
+ {
+ var bytes = Convert.FromBase64String(cookie.Value);
+ var guid = new Guid(bytes);
+ var token = GetCachedToken(guid.ToString())
+ ?? MembershipService.GetToken(guid);
+
+ if (token != null
+ && !token.Expired
+ && (token.RenewIfNeed() || token.LastIp != Request.UserHostAddress))
+ {
+ token.LastIp = Request.UserHostAddress;
+ MembershipService.UpdateAuthorization(token.AuthCode, token.Expires, token.LastIp);
+ }
+ // else // DO NOT set token = null here
+
+ Token = token;
+ }
+ }
+ catch
+ {
+ Token = null;
+ }
+
+ base.OnAuthorization(filterContext);
+ }
+
+ protected override void OnActionExecuting(ActionExecutingContext filterContext)
+ {
+ if (UserConfiguration.Current.ForceSsl && !Request.IsSecureConnection)
+ {
+ var uri = Request.Url;
+ filterContext.Result = Redirect(new Uri(String.Format("https://{0}:{1}{2}", uri.Host, UserConfiguration.Current.SslPort, uri.PathAndQuery)).ToString());
+ XTrace.WriteLine("Redirect to SSL from " + uri);
+ return;
+ }
+
+ var culture = Thread.CurrentThread.CurrentUICulture;
+ var displayName = culture.Name.StartsWith("en")
+ ? culture.NativeName
+ : culture.EnglishName + " - " + culture.NativeName;
+
+ ViewBag.Language = displayName;
+ ViewBag.Lang = culture.Name;
+ ViewBag.Identity = 0;
+
+ Response.AddHeader("X-GitCandy-Version", AppInfomation.Version.ToString());
+
+ base.OnActionExecuting(filterContext);
+ }
+
+ protected virtual ActionResult RedirectToStartPage(String returnUrl = null)
+ {
+ if (String.IsNullOrEmpty(returnUrl) || !Url.IsLocalUrl(returnUrl)) return RedirectToAction("Index", "Repository");
+
+ return Redirect(returnUrl);
+ }
+
+ private void CacheToken(Token token)
+ {
+ if (token != null)
+ HttpRuntime.Cache.Insert(token.AuthCode.ToString(), token, null, token.Expires, Cache.NoSlidingExpiration);
+ }
+
+ private Token GetCachedToken(String key)
+ {
+ return key == null
+ ? null
+ : HttpRuntime.Cache.Get(key) as Token;
+ }
+
+ private void RemoveCachedToken(String key)
+ {
+ if (key != null)
+ HttpRuntime.Cache.Remove(key);
+ }
+
+ //protected override void OnException(ExceptionContext filterContext)
+ //{
+ // // 拦截处理异常
+ // if (!filterContext.ExceptionHandled)
+ // {
+ // var ex = filterContext.Exception;
+ // var ae = ex as ArgumentException;
+ // if (ae != null)
+ // ModelState.AddModelError(ae.ParamName, ae.Message);
+ // else
+ // ModelState.AddModelError(null, ex);
+
+ // filterContext.ExceptionHandled = true;
+ // }
+
+ // base.OnException(filterContext);
+ //}
+ }
+}
diff --git a/GitCandy.Web/Controllers/GitController.cs b/GitCandy.Web/Controllers/GitController.cs
new file mode 100644
index 0000000..0dac50a
--- /dev/null
+++ b/GitCandy.Web/Controllers/GitController.cs
@@ -0,0 +1,184 @@
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.IO.Compression;
+using System.Linq;
+using System.Net;
+using System.Threading.Tasks;
+using System.Web;
+using System.Web.Mvc;
+using GitCandy.Data;
+using GitCandy.Filters;
+using GitCandy.Git;
+using LibGit2Sharp;
+
+namespace GitCandy.Controllers
+{
+ public class GitController : CandyControllerBase
+ {
+ public RepositoryService RepositoryService { get; set; } = new RepositoryService();
+
+ [SmartGit]
+ public ActionResult Smart(String owner, String project, String service, String verb)
+ {
+ switch (verb)
+ {
+ case "info/refs":
+ return InfoRefs(owner, project, service);
+ case "git-upload-pack":
+ return ExecutePack(owner, project, "git-upload-pack");
+ case "git-receive-pack":
+ return ExecutePack(owner, project, "git-receive-pack");
+ default:
+ return RedirectToAction("Tree", "Repository", new { Owner = owner, Name = project });
+ }
+ }
+
+ protected ActionResult InfoRefs(String owner, String project, String service)
+ {
+ Response.Charset = "";
+ Response.ContentType = String.Format(CultureInfo.InvariantCulture, "application/x-{0}-advertisement", service);
+ SetNoCache();
+ Response.Write(FormatMessage(String.Format(CultureInfo.InvariantCulture, "# service={0}\n", service)));
+ Response.Write(FlushMessage());
+
+ try
+ {
+ using (var git = new GitService(project))
+ {
+ var svc = service.Substring(4);
+ git.InfoRefs(svc, GetInputStream(), Response.OutputStream);
+ }
+ return new EmptyResult();
+ }
+ catch (RepositoryNotFoundException e)
+ {
+ throw new HttpException((int)HttpStatusCode.NotFound, String.Empty, e);
+ }
+ catch (Exception e)
+ {
+ throw new HttpException((int)HttpStatusCode.InternalServerError, String.Empty, e);
+ }
+ }
+
+ protected ActionResult ExecutePack(String owner, String project, String service)
+ {
+ Response.Charset = "";
+ Response.ContentType = String.Format(CultureInfo.InvariantCulture, "application/x-{0}-result", service);
+ SetNoCache();
+
+ try
+ {
+ using (var git = new GitService(project))
+ {
+ var svc = service.Substring(4);
+ git.ExecutePack(svc, GetInputStream(), Response.OutputStream);
+
+ // 拦截提交
+ if (svc == "receive-pack") Task.Run(() => UpdateRepo(owner, project));
+ }
+ return new EmptyResult();
+ }
+ catch (RepositoryNotFoundException e)
+ {
+ throw new HttpException((int)HttpStatusCode.NotFound, String.Empty, e);
+ }
+ catch (Exception e)
+ {
+ throw new HttpException((int)HttpStatusCode.InternalServerError, String.Empty, e);
+ }
+ }
+
+ /// <summary>更新仓库统计信息</summary>
+ /// <param name="project"></param>
+ private void UpdateRepo(String owner, String project)
+ {
+ using (var git = new GitService(project))
+ {
+ // 修正提交数、分支、参与人等
+ var commit = git.Repository.Head.Tip;
+ var ancestors = git.Repository.Commits.QueryBy(new CommitFilter { IncludeReachableFrom = commit });
+
+ var set = new HashSet<String>();
+ var cms = 0;
+ var cts = 0;
+ foreach (var ancestor in ancestors)
+ {
+ cms++;
+ if (set.Add(ancestor.Author.ToString()))
+ cts++;
+ }
+
+ var repo = NewLife.GitCandy.Entity.Repository.FindByOwnerAndName(owner, project);
+ if (repo != null)
+ {
+ if (cms > 0) repo.Commits = cms;
+ repo.Branches = git.Repository.Branches.Count();
+ if (cts > 0) repo.Contributors = cts;
+ var size = 0L;
+ repo.Files = FilesInCommit(commit, out size);
+ repo.Size = size;
+ repo.LastCommit = commit.Committer.When.LocalDateTime;
+
+ repo.SaveAsync();
+ }
+ }
+ }
+
+ private int FilesInCommit(Commit commit, out long sourceSize)
+ {
+ var count = 0;
+ var stack = new Stack<Tree>();
+ sourceSize = 0;
+
+ var repo = ((IBelongToARepository)commit).Repository;
+
+ stack.Push(commit.Tree);
+ while (stack.Count != 0)
+ {
+ var tree = stack.Pop();
+ foreach (var entry in tree)
+ switch (entry.TargetType)
+ {
+ case TreeEntryTargetType.Blob:
+ count++;
+ sourceSize += repo.ObjectDatabase.RetrieveObjectMetadata(entry.Target.Id).Size;
+ break;
+ case TreeEntryTargetType.Tree:
+ stack.Push((Tree)entry.Target);
+ break;
+ }
+ }
+ return count;
+ }
+
+ #region GitController Extension
+ private void SetNoCache()
+ {
+ Response.AddHeader("Expires", "Fri, 01 Jan 1980 00:00:00 GMT");
+ Response.AddHeader("Pragma", "no-cache");
+ Response.AddHeader("Cache-Control", "no-cache, max-age=0, must-revalidate");
+ }
+
+ private Stream GetInputStream()
+ {
+ if (Request.Headers["Content-Encoding"] == "gzip")
+ {
+ return new GZipStream(Request.GetBufferlessInputStream(true), CompressionMode.Decompress);
+ }
+ return Request.GetBufferlessInputStream(true);
+ }
+
+ private static String FormatMessage(String input)
+ {
+ return (input.Length + 4).ToString("X4", CultureInfo.InvariantCulture) + input;
+ }
+
+ private static String FlushMessage()
+ {
+ return "0000";
+ }
+ #endregion
+ }
+}
diff --git a/GitCandy.Web/Controllers/HomeController.cs b/GitCandy.Web/Controllers/HomeController.cs
new file mode 100644
index 0000000..2bd2e6e
--- /dev/null
+++ b/GitCandy.Web/Controllers/HomeController.cs
@@ -0,0 +1,33 @@
+using System;
+using System.Web;
+using System.Web.Mvc;
+
+namespace GitCandy.Controllers
+{
+ public class HomeController : CandyControllerBase
+ {
+ public ActionResult Index()
+ {
+ return RedirectToStartPage();
+ }
+
+ [AllowAnonymous]
+ public ActionResult About()
+ {
+ return View();
+ }
+
+ [AllowAnonymous]
+ public ActionResult Language(String lang)
+ {
+ var cookie = new HttpCookie("Lang", lang);
+ Response.Cookies.Set(cookie);
+
+ Session["Culture"] = null;
+
+ if (Request.UrlReferrer == null) return RedirectToStartPage();
+
+ return Redirect(Request.UrlReferrer.PathAndQuery);
+ }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Controllers/RepositoryController.cs b/GitCandy.Web/Controllers/RepositoryController.cs
new file mode 100644
index 0000000..054f4d6
--- /dev/null
+++ b/GitCandy.Web/Controllers/RepositoryController.cs
@@ -0,0 +1,486 @@
+using System;
+using System.Collections.Generic;
+using System.Net;
+using System.Web;
+using System.Web.Mvc;
+using GitCandy.App_GlobalResources;
+using GitCandy.Base;
+using GitCandy.Configuration;
+using GitCandy.Data;
+using GitCandy.Filters;
+using GitCandy.Git;
+using GitCandy.Git.Cache;
+using GitCandy.Models;
+using GitCandy.Ssh;
+using NewLife.GitCandy.Entity;
+using NewLife.Log;
+
+namespace GitCandy.Controllers
+{
+ public class RepositoryController : CandyControllerBase
+ {
+ public RepositoryService RepositoryService { get; set; } = new RepositoryService();
+
+ public ActionResult Index()
+ {
+ var username = Token?.Username;
+
+ var p = new NewLife.Web.Pager();
+ p.PageSize = 20;
+
+ // 管理员可以看到其他人私有仓库
+ var model = RepositoryService.GetRepositories(username, Token != null && Token.IsSystemAdministrator, p);
+
+ model.CanCreateRepository = Token != null && (UserConfiguration.Current.AllowRepositoryCreation || Token.IsSystemAdministrator);
+
+ return View(model);
+ }
+
+ [AllowRepositoryCreation]
+ public ActionResult Create()
+ {
+ var model = new RepositoryModel
+ {
+ IsPrivate = false,
+ AllowAnonymousRead = true,
+ AllowAnonymousWrite = false,
+ };
+
+ return View(model);
+ }
+
+ [HttpPost]
+ [AllowRepositoryCreation]
+ public ActionResult Create(RepositoryModel model)
+ {
+ if (ModelState.IsValid)
+ {
+ bool badName;
+ var repo = RepositoryService.Create(model, Token.UserID, out badName);
+ if (repo != null)
+ {
+ var success = GitService.CreateRepository(model.Name);
+ if (!success)
+ {
+ RepositoryService.Delete(Token.Username, model.Name);
+ repo = null;
+ }
+ }
+ if (repo != null)
+ {
+ return RedirectToAction("Detail", "Repository", new { name = repo.Name });
+ }
+ if (badName)
+ ModelState.AddModelError("Name", SR.Repository_AlreadyExists);
+ }
+
+ return View(model);
+ }
+
+ [ReadRepository]
+ public ActionResult Detail(String owner, String name)
+ {
+ var model = RepositoryService.Get(owner, name, true, Token?.Username);
+ if (model == null) throw new HttpException((int)HttpStatusCode.NotFound, String.Empty);
+
+ using (var git = new GitService(name))
+ {
+ model.DefaultBranch = git.GetHeadBranch();
+ }
+ return View(model);
+ }
+
+ [RepositoryOwnerOrSystemAdministrator]
+ public ActionResult Edit(String owner, String name)
+ {
+ var model = RepositoryService.Get(owner, name, username: Token.Username);
+ if (model == null)
+ throw new HttpException((int)HttpStatusCode.NotFound, String.Empty);
+ using (var git = new GitService(name))
+ {
+ model.DefaultBranch = git.GetHeadBranch();
+ model.LocalBranches = git.GetLocalBranches();
+ }
+ return View(model);
+ }
+
+ [HttpPost]
+ [RepositoryOwnerOrSystemAdministrator]
+ public ActionResult Edit(String owner, String name, RepositoryModel model)
+ {
+ if (String.IsNullOrEmpty(name))
+ throw new HttpException((int)HttpStatusCode.NotFound, String.Empty);
+
+ if (ModelState.IsValid)
+ {
+ if (!RepositoryService.Update(owner, model))
+ throw new HttpException((int)HttpStatusCode.NotFound, String.Empty);
+ using (var git = new GitService(name))
+ {
+ git.SetHeadBranch(model.DefaultBranch);
+ }
+ return RedirectToAction("Detail", new { name });
+ }
+
+ return View(model);
+ }
+
+ [RepositoryOwnerOrSystemAdministrator]
+ public ActionResult Coop(String owner, String name)
+ {
+ if (String.IsNullOrEmpty(name))
+ throw new HttpException((int)HttpStatusCode.NotFound, String.Empty);
+
+ var model = RepositoryService.GetRepositoryCollaborationModel(owner, name);
+ return View(model);
+ }
+
+ [HttpPost]
+ [RepositoryOwnerOrSystemAdministrator]
+ public JsonResult ChooseUser(String owner, String name, String user, String act, String value)
+ {
+ String message = null;
+
+ if (act == "add")
+ {
+ var role = RepositoryService.RepositoryAddUser(owner, name, user);
+ if (role != null)
+ return Json(new { role.AllowRead, role.AllowWrite, role.IsOwner });
+ }
+ else if (act == "del")
+ {
+ if (!Token.IsSystemAdministrator
+ && String.Equals(user, Token.Username, StringComparison.OrdinalIgnoreCase))
+ message = SR.Account_CantRemoveSelf;
+ else if (RepositoryService.RepositoryRemoveUser(owner, name, user))
+ return Json("success");
+ }
+ else if (act == "read" || act == "write" || act == "owner")
+ {
+ var val = String.Equals(bool.TrueString, value, StringComparison.OrdinalIgnoreCase);
+ if (!Token.IsSystemAdministrator
+ && (act == "owner" && !val)
+ && String.Equals(user, Token.Username, StringComparison.OrdinalIgnoreCase))
+ message = SR.Account_CantRemoveSelf;
+ else if (RepositoryService.RepositoryUserSetValue(owner, name, user, act, val))
+ return Json("success");
+ }
+
+ Response.StatusCode = 400;
+ return Json(message ?? SR.Shared_SomethingWrong);
+ }
+
+ [HttpPost]
+ [RepositoryOwnerOrSystemAdministrator]
+ public JsonResult ChooseTeam(String owner, String name, String team, String act, String value)
+ {
+ if (act == "add")
+ {
+ var role = RepositoryService.RepositoryAddUser(owner, name, team);
+ if (role != null)
+ return Json(new { role.AllowRead, role.AllowWrite });
+ }
+ else if (act == "del")
+ {
+ if (RepositoryService.RepositoryRemoveUser(owner, name, team))
+ return Json("success");
+ }
+ else if (act == "read" || act == "write" || act == "owner")
+ {
+ var val = String.Equals(bool.TrueString, value, StringComparison.OrdinalIgnoreCase);
+ if (RepositoryService.RepositoryUserSetValue(owner, name, team, act, val))
+ return Json("success");
+ }
+
+ Response.StatusCode = 400;
+ return Json(SR.Shared_SomethingWrong);
+ }
+
+ [RepositoryOwnerOrSystemAdministrator]
+ public ActionResult Delete(String owner, String name, String conform)
+ {
+ if (String.Equals(conform, "yes", StringComparison.OrdinalIgnoreCase))
+ {
+ RepositoryService.Delete(owner, name);
+ GitService.DeleteRepository(name);
+ GitCacheAccessor.Delete(name);
+ XTrace.WriteLine("Repository {0} deleted by {1}#{2}", name, Token.Username, Token.UserID);
+ return RedirectToAction("Index");
+ }
+ return View((object)name);
+ }
+
+ [ReadRepository]
+ public ActionResult Tree(String owner, String name, String path)
+ {
+ using (var git = new GitService(name))
+ {
+ var model = git.GetTree(path);
+ if (model == null) throw new HttpException((int)HttpStatusCode.NotFound, String.Empty);
+
+ if (model.Entries == null && model.ReferenceName != "HEAD")
+ return RedirectToAction("Tree", new { path = model.ReferenceName });
+
+ model.GitUrls = GetGitUrl(name);
+ model.RepositoryName = name;
+ if (model.IsRoot)
+ {
+ //var m = RepositoryService.GetRepositoryModel(name);
+ //model.Description = m.Description;
+
+ // 修正提交数、分支、参与人等
+ var repo = Repository.FindByOwnerAndName(owner, name);
+ if (repo != null)
+ {
+ if (model.Scope != null)
+ {
+ repo.Commits = model.Scope.Commits;
+ repo.Branches = model.Scope.Branches;
+ repo.Contributors = model.Scope.Contributors;
+ }
+ if (model.Commit != null) repo.LastCommit = model.Commit.Committer.When.LocalDateTime;
+
+ repo.Views++;
+ repo.LastView = DateTime.Now;
+ repo.SaveAsync();
+
+ model.Description = repo.Description;
+ }
+ }
+ return View(model);
+ }
+ }
+
+ [ReadRepository]
+ public ActionResult Blob(String name, String path)
+ {
+ using (var git = new GitService(name))
+ {
+ var model = git.GetBlob(path);
+ if (model == null)
+ throw new HttpException((int)HttpStatusCode.NotFound, String.Empty);
+ model.RepositoryName = name;
+ return View(model);
+ }
+ }
+
+ [ReadRepository]
+ public ActionResult Blame(String name, String path)
+ {
+ using (var git = new GitService(name))
+ {
+ var model = git.GetBlame(path);
+ if (model == null)
+ throw new HttpException((int)HttpStatusCode.NotFound, String.Empty);
+ model.RepositoryName = name;
+ return View(model);
+ }
+ }
+
+ [ReadRepository]
+ public ActionResult Raw(String name, String path)
+ {
+ using (var git = new GitService(name))
+ {
+ var model = git.GetBlob(path);
+ if (model == null)
+ throw new HttpException((int)HttpStatusCode.NotFound, String.Empty);
+
+ return model.BlobType == BlobType.Binary
+ ? new RawResult(model.RawData, FileHelper.BinaryMimeType, model.Name)
+ : new RawResult(model.RawData);
+ }
+ }
+
+ [ReadRepository]
+ public ActionResult Commit(String name, String path)
+ {
+ using (var git = new GitService(name))
+ {
+ var model = git.GetCommit(path);
+ if (model == null)
+ throw new HttpException((int)HttpStatusCode.NotFound, String.Empty);
+ model.RepositoryName = name;
+ return View(model);
+ }
+ }
+
+ [ReadRepository]
+ public ActionResult Compare(String name, String path)
+ {
+ using (var git = new GitService(name))
+ {
+ var start = "";
+ var end = "";
+ if (!String.IsNullOrEmpty(path))
+ {
+ var index = path.IndexOf("...");
+ if (index == -1)
+ {
+ start = path;
+ end = "";
+ }
+ else
+ {
+ start = path.Substring(0, index);
+ end = path.Substring(index + 3);
+ }
+ }
+ var model = git.GetCompare(start.Replace(';', '/'), end.Replace(';', '/'));
+ if (model == null)
+ throw new HttpException((int)HttpStatusCode.NotFound, String.Empty);
+ model.RepositoryName = name;
+ return View(model);
+ }
+ }
+
+ [ReadRepository]
+ public ActionResult Commits(String name, String path, int? page)
+ {
+ using (var git = new GitService(name))
+ {
+ var model = git.GetCommits(path, page ?? 1, UserConfiguration.Current.Commits);
+ if (model == null)
+ throw new HttpException((int)HttpStatusCode.NotFound, String.Empty);
+
+ ViewBag.Pager = Pager.Items(model.ItemCount)
+ .PerPage(UserConfiguration.Current.Commits)
+ .Move(model.CurrentPage)
+ .Segment(5)
+ .Center();
+
+ model.RepositoryName = name;
+ return View(model);
+ }
+ }
+
+ [ReadRepository]
+ public ActionResult Archive(String name, String path, String eol = null)
+ {
+ using (var git = new GitService(name))
+ {
+ String newline = null;
+ switch (eol)
+ {
+ case "LF":
+ newline = "\n";
+ break;
+ case "CR":
+ newline = "\r";
+ break;
+ case "CRLF":
+ newline = "\r\n";
+ break;
+ default:
+ eol = null;
+ break;
+ }
+
+ String referenceName;
+ var cacheFile = git.GetArchiveFilename(path, newline, out referenceName);
+ if (cacheFile == null)
+ throw new HttpException((int)HttpStatusCode.NotFound, String.Empty);
+
+ var filename = name + "-" + referenceName;
+ if (eol != null)
+ filename += "-" + eol;
+ return File(cacheFile, "application/zip", filename + ".zip");
+ }
+ }
+
+ [ReadRepository]
+ public ActionResult Tags(String owner, String name)
+ {
+ using (var git = new GitService(name))
+ {
+ var model = git.GetTags();
+ if (model == null)
+ throw new HttpException((int)HttpStatusCode.NotFound, String.Empty);
+ model.RepositoryName = name;
+ model.CanDelete = Token != null && Token.IsSystemAdministrator
+ || RepositoryService.CanWriteRepository(owner, name, Token == null ? null : Token.Username);
+ return View(model);
+ }
+ }
+
+ [HttpPost]
+ [ReadRepository(requireWrite: true)]
+ public ActionResult Tags(String owner, String name, String path)
+ {
+ using (var git = new GitService(name))
+ {
+ git.DeleteTag(path);
+ return Json("success");
+ }
+ }
+
+ [ReadRepository]
+ public ActionResult Branches(String owner, String name)
+ {
+ using (var git = new GitService(name))
+ {
+ var model = git.GetBranches();
+ if (model == null)
+ throw new HttpException((int)HttpStatusCode.NotFound, String.Empty);
+ model.RepositoryName = name;
+ model.CanDelete = Token != null && Token.IsSystemAdministrator
+ || RepositoryService.CanWriteRepository(owner, name, Token == null ? null : Token.Username);
+ return View(model);
+ }
+ }
+
+ [HttpPost]
+ [ReadRepository(requireWrite: true)]
+ public JsonResult Branches(String owner, String name, String path)
+ {
+ using (var git = new GitService(name))
+ {
+ git.DeleteBranch(path);
+ return Json("success");
+ }
+ }
+
+ [ReadRepository]
+ public ActionResult Contributors(String owner, String name, String path)
+ {
+ using (var git = new GitService(name))
+ {
+ var model = git.GetContributors(path);
+ if (model == null)
+ throw new HttpException((int)HttpStatusCode.NotFound, String.Empty);
+
+ // 修正文件数
+ var repo = Repository.FindByOwnerAndName(owner, name);
+ if (repo != null)
+ {
+ repo.Files = model.Statistics.Current.NumberOfFiles;
+ repo.SaveAsync();
+ }
+
+ return View(model);
+ }
+ }
+
+ private GitUrl[] GetGitUrl(String name)
+ {
+ var url = Request.Url;
+ String path = VirtualPathUtility.ToAbsolute("~/git/" + name + ".git");
+ UriBuilder ub = new UriBuilder(url.Scheme, url.Host, url.Port, path);
+ var httpUrl = ub.Uri.ToString();
+
+ var sshPort = UserConfiguration.Current.SshPort;
+ var sshUrl = sshPort == StartingInfo.DefaultPort
+ ? String.Format("git@{0}:git/{1}.git", url.Host, name)
+ : String.Format("ssh://git@{0}:{1}/git/{2}.git", url.Host, sshPort, name);
+
+ var result = new List<GitUrl>(4);
+ result.Add(new GitUrl { Type = url.Scheme, Url = httpUrl });
+ if (UserConfiguration.Current.EnableSsh)
+ result.Add(new GitUrl { Type = "ssh", Url = sshUrl });
+
+ return result.ToArray();
+ }
+
+ public int sshPort { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Controllers/SettingController.cs b/GitCandy.Web/Controllers/SettingController.cs
new file mode 100644
index 0000000..6518635
--- /dev/null
+++ b/GitCandy.Web/Controllers/SettingController.cs
@@ -0,0 +1,113 @@
+using System;
+using System.IO;
+using System.Web;
+using System.Web.Mvc;
+using GitCandy.Configuration;
+using GitCandy.Filters;
+using GitCandy.Models;
+using GitCandy.Ssh;
+using NewLife.Log;
+
+namespace GitCandy.Controllers
+{
+ [Administrator]
+ public class SettingController : CandyControllerBase
+ {
+ public ActionResult Edit()
+ {
+ var config = UserConfiguration.Current;
+ var model = new SettingModel
+ {
+ IsPublicServer = config.IsPublicServer,
+ ForceSsl = config.ForceSsl,
+ SslPort = config.SslPort,
+ SshPort = config.SshPort,
+ EnableSsh = config.EnableSsh,
+ LocalSkipCustomError = config.LocalSkipCustomError,
+ AllowRegisterUser = config.AllowRegisterUser,
+ AllowRepositoryCreation = config.AllowRepositoryCreation,
+ RepositoryPath = config.RepositoryPath.GetFullPath(),
+ CachePath = config.CachePath.GetFullPath(),
+ GitCorePath = config.GitCorePath.GetFullPath(),
+ NumberOfCommitsPerPage = config.Commits,
+ NumberOfItemsPerList = config.PageSize,
+ NumberOfRepositoryContributors = config.Contributors,
+ };
+ return View(model);
+ }
+
+ [HttpPost]
+ public ActionResult Edit(SettingModel model)
+ {
+ var needRestart = false;
+ var needRestartSshServer = false;
+
+ if (ModelState.IsValid)
+ {
+ var config = UserConfiguration.Current;
+
+ needRestart = (config.CachePath != model.CachePath);
+ needRestartSshServer = config.SshPort != model.SshPort || config.EnableSsh != model.EnableSsh;
+
+ config.IsPublicServer = model.IsPublicServer;
+ config.ForceSsl = model.ForceSsl;
+ config.SslPort = model.SslPort;
+ config.SshPort = model.SshPort;
+ config.EnableSsh = model.EnableSsh;
+ config.LocalSkipCustomError = model.LocalSkipCustomError;
+ config.AllowRegisterUser = model.AllowRegisterUser;
+ config.AllowRepositoryCreation = model.AllowRepositoryCreation;
+ config.RepositoryPath = model.RepositoryPath;
+ config.CachePath = model.CachePath;
+ config.GitCorePath = model.GitCorePath;
+ config.Commits = model.NumberOfCommitsPerPage;
+ config.PageSize = model.NumberOfItemsPerList;
+ config.Contributors = model.NumberOfRepositoryContributors;
+ config.Save();
+ ModelState.Clear();
+ }
+
+ XTrace.WriteLine("Settings updated by {0}#{1}", Token.Username, Token.UserID);
+
+ if (needRestart)
+ {
+ SshServerConfig.StopSshServer();
+ HttpRuntime.UnloadAppDomain();
+ }
+ else if (needRestartSshServer)
+ {
+ SshServerConfig.RestartSshServer();
+ }
+
+ return View(model);
+ }
+
+ public ActionResult Restart(String conform)
+ {
+ if (String.Equals(conform, "yes", StringComparison.OrdinalIgnoreCase))
+ {
+ HttpRuntime.UnloadAppDomain();
+ return RedirectToStartPage();
+ }
+ return View();
+ }
+
+ public ActionResult ReGenSsh(String conform)
+ {
+ if (String.Equals(conform, "yes", StringComparison.OrdinalIgnoreCase))
+ {
+ UserConfiguration.Current.HostKeys.Clear();
+ foreach (var type in KeyUtils.SupportedAlgorithms)
+ {
+ UserConfiguration.Current.HostKeys.Add(new HostKey { KeyType = type, KeyXml = KeyUtils.GeneratePrivateKey(type) });
+ }
+ UserConfiguration.Current.Save();
+
+ SshServerConfig.RestartSshServer();
+
+ return RedirectToAction("Edit");
+ }
+ return View();
+ }
+ }
+}
diff --git a/GitCandy.Web/Controllers/TeamController.cs b/GitCandy.Web/Controllers/TeamController.cs
new file mode 100644
index 0000000..e20a508
--- /dev/null
+++ b/GitCandy.Web/Controllers/TeamController.cs
@@ -0,0 +1,150 @@
+using System;
+using System.Net;
+using System.Web;
+using System.Web.Mvc;
+using GitCandy.App_GlobalResources;
+using GitCandy.Base;
+using GitCandy.Configuration;
+using GitCandy.Filters;
+using GitCandy.Models;
+using NewLife.Log;
+using UserX = NewLife.GitCandy.Entity.User;
+
+namespace GitCandy.Controllers
+{
+ public class TeamController : CandyControllerBase
+ {
+ [Administrator]
+ public ActionResult Index(String query, int? page)
+ {
+ var model = MembershipService.GetTeamList(query, page ?? 1, UserConfiguration.Current.PageSize);
+
+ ViewBag.Pager = Pager.Items(model.ItemCount)
+ .PerPage(UserConfiguration.Current.PageSize)
+ .Move(model.CurrentPage)
+ .Segment(5)
+ .Center();
+
+ return View(model);
+ }
+
+ [Administrator]
+ public ActionResult Create()
+ {
+ return View();
+ }
+
+ [HttpPost]
+ [Administrator]
+ public ActionResult Create(TeamModel model)
+ {
+ if (ModelState.IsValid)
+ {
+ try
+ {
+ var team = UserX.CreateTeam(model.Name, model.Nickname, model.Description);
+ if (team != null)
+ return RedirectToAction("Detail", "Team", new { team.Name });
+ }
+ catch (ArgumentException aex)
+ {
+ ModelState.AddModelError(aex.ParamName, aex.Message);
+ }
+ catch (Exception ex)
+ {
+ ModelState.AddModelError("", ex.Message);
+ }
+ }
+
+ return View(model);
+ }
+
+ public ActionResult Detail(String name)
+ {
+ var model = MembershipService.GetTeamModel(name, true, Token == null ? null : Token.Username);
+ if (model == null)
+ throw new HttpException((int)HttpStatusCode.NotFound, String.Empty);
+ return View(model);
+ }
+
+ [TeamOrSystemAdministrator]
+ public ActionResult Edit(String name)
+ {
+ var model = MembershipService.GetTeamModel(name);
+ if (model == null)
+ throw new HttpException((int)HttpStatusCode.NotFound, String.Empty);
+ ModelState.Clear();
+
+ return View(model);
+ }
+
+ [HttpPost]
+ [TeamOrSystemAdministrator]
+ public ActionResult Edit(String name, TeamModel model)
+ {
+ if (ModelState.IsValid)
+ if (!MembershipService.UpdateTeam(model))
+ throw new HttpException((int)HttpStatusCode.NotFound, String.Empty);
+
+ return View(model);
+ }
+
+ [TeamOrSystemAdministrator]
+ public ActionResult Users(String name)
+ {
+ var model = MembershipService.GetTeamModel(name, true);
+ return View(model);
+ }
+
+ [HttpPost]
+ [TeamOrSystemAdministrator]
+ public JsonResult ChooseUser(String name, String user, String act)
+ {
+ String message = null;
+ if (act == "add")
+ {
+ if (MembershipService.TeamAddUser(name, user))
+ return Json("success");
+ }
+ else if (act == "del")
+ {
+ if (!Token.IsSystemAdministrator
+ && String.Equals(user, Token.Username, StringComparison.OrdinalIgnoreCase))
+ message = SR.Account_CantRemoveSelf;
+ else if (MembershipService.TeamRemoveUser(name, user))
+ return Json("success");
+ }
+ else if (act == "admin" || act == "member")
+ {
+ var isAdmin = act == "admin";
+ if (!Token.IsSystemAdministrator
+ && !isAdmin && String.Equals(user, Token.Username, StringComparison.OrdinalIgnoreCase))
+ message = SR.Account_CantRemoveSelf;
+ else if (MembershipService.TeamUserSetAdministrator(name, user, isAdmin))
+ return Json("success");
+ }
+
+ Response.StatusCode = 400;
+ return Json(message ?? SR.Shared_SomethingWrong);
+ }
+
+ [Administrator]
+ public ActionResult Delete(String name, String conform)
+ {
+ if (String.Equals(conform, "yes", StringComparison.OrdinalIgnoreCase))
+ {
+ MembershipService.DeleteTeam(name);
+ XTrace.WriteLine("Team {0} deleted by {1}#{2}", name, Token.Username, Token.UserID);
+ return RedirectToAction("Index");
+ }
+ return View((object)name);
+ }
+
+ [HttpPost]
+ public JsonResult Search(String query)
+ {
+ var result = MembershipService.SearchTeam(query);
+ return Json(result);
+ }
+ }
+}
diff --git a/GitCandy.Web/Data/MembershipService.cs b/GitCandy.Web/Data/MembershipService.cs
new file mode 100644
index 0000000..280a013
--- /dev/null
+++ b/GitCandy.Web/Data/MembershipService.cs
@@ -0,0 +1,380 @@
+using System;
+using System.Linq;
+using GitCandy.Base;
+using GitCandy.Models;
+using GitCandy.Security;
+using GitCandy.Ssh;
+using NewLife.Data;
+using NewLife.GitCandy.Entity;
+
+namespace GitCandy.Data
+{
+ public class MembershipService
+ {
+ #region Account part
+ public UserModel GetUserModel(String name, bool withMembers = false, String viewUser = null)
+ {
+ var user = User.FindByName(name);
+ if (user == null) return null;
+
+ var model = new UserModel
+ {
+ Name = user.Name,
+ Nickname = user.Nickname,
+ Email = user.Email,
+ Description = user.Description,
+ IsSystemAdministrator = user.IsAdmin,
+ };
+ if (withMembers)
+ {
+ model.Teams = user.Teams.ToDictionary(e => e.Team.Name, e => e.Team.Nickname);
+ var rs = user.Repositories.Select(e => e.Repository).Where(e => e.Enable);
+ if (!viewUser.IsNullOrEmpty())
+ {
+ var vu = User.FindByName(viewUser);
+ rs = rs.Where(e => e.CanViewFor(vu));
+ }
+ model.Respositories = rs.Select(e => e.Name).OrderBy(e => e).ToArray();
+ }
+ return model;
+ }
+
+ public User Login(String id, String password)
+ {
+ var user = User.FindByName(id) ?? User.FindByEmail(id);
+ if (user != null && user.Login(password)) return user;
+
+ return null;
+ }
+
+ public void SetPassword(String name, String newPassword)
+ {
+ var user = User.FindByName(name);
+ if (user != null)
+ {
+ user.Password = newPassword.MD5();
+
+ var auths = AuthorizationLog.FindAllByUserID(user.ID);
+ foreach (var auth in auths)
+ {
+ auth.IsValid = false;
+ }
+ user.Save();
+ auths.Save();
+ }
+ }
+
+ public bool UpdateUser(UserModel model)
+ {
+ var user = User.FindByName(model.Name);
+ if (user != null)
+ {
+ user.Nickname = model.Nickname;
+ user.Email = model.Email;
+ user.Description = model.Description;
+ user.IsAdmin = model.IsSystemAdministrator;
+
+ user.Save();
+ return true;
+ }
+ return false;
+ }
+
+ public AuthorizationLog CreateAuthorization(long userID, DateTime expires, String ip)
+ {
+ var auth = new AuthorizationLog
+ {
+ AuthCode = Guid.NewGuid().ToString(),
+ UserID = (Int32)userID,
+ IssueDate = DateTime.Now,
+ Expires = expires,
+ IssueIp = ip,
+ LastIp = ip,
+ IsValid = true,
+ };
+ auth.Save();
+ return auth;
+ }
+
+ public Token GetToken(Guid authCode)
+ {
+ var auth = AuthorizationLog.FindByAuthCode(authCode + "");
+ if (auth == null) return null;
+
+ var user = auth.User;
+
+ return new Token(auth.AuthCode, auth.ID, user.Name, user.Nickname, user.IsAdmin, auth.Expires)
+ {
+ LastIp = auth.LastIp
+ };
+ }
+
+ public void UpdateAuthorization(Guid authCode, DateTime expires, String lastIp)
+ {
+ var auth = AuthorizationLog.FindByAuthCode(authCode + "");
+ if (auth != null)
+ {
+ auth.Expires = expires;
+ auth.LastIp = lastIp;
+ auth.Save();
+ }
+ }
+
+ public void SetAuthorizationAsInvalid(Guid authCode)
+ {
+ var auth = AuthorizationLog.FindByAuthCode(authCode + "");
+ if (auth != null)
+ {
+ auth.IsValid = false;
+ auth.Save();
+ }
+ }
+
+ public void DeleteUser(String name)
+ {
+ var user = User.FindByName(name);
+ if (user != null) user.Delete();
+ }
+
+ public UserListModel GetUserList(String keyword, int page, int pagesize = 20)
+ {
+ var p = new PageParameter();
+ p.PageIndex = page;
+ p.PageSize = pagesize;
+ var list = User.SearchByName(keyword, p);
+
+ return new UserListModel
+ {
+ Users = list.ToList().Select(e => new UserModel
+ {
+ Name = e.Name,
+ Nickname = e.Nickname,
+ Email = e.Email,
+ Description = e.Description,
+ IsSystemAdministrator = e.IsAdmin,
+ }).ToArray(),
+ CurrentPage = page,
+ ItemCount = p.TotalCount
+ };
+ }
+
+ public String AddSshKey(String name, String sshkey)
+ {
+ var seg = sshkey.Split();
+ var type = seg[0];
+ sshkey = seg[1];
+ var fingerprint = KeyUtils.GetFingerprint(sshkey);
+
+ var user = User.FindByName(name);
+ if (user == null) return null;
+
+ var key = new SshKey
+ {
+ UserID = user.ID,
+ KeyType = type,
+ Fingerprint = fingerprint,
+ PublicKey = sshkey,
+ ImportData = DateTime.UtcNow,
+ LastUse = DateTime.UtcNow,
+ };
+
+ key.Save();
+
+ return fingerprint;
+ }
+
+ public void DeleteSshKey(String name, String sshkey)
+ {
+ var user = User.FindByName(name);
+ if (user == null) return;
+
+ var key = SshKey.FindByUserID(user.ID);
+ if (key == null) return;
+
+ if (key.Fingerprint == sshkey) key.Delete();
+ }
+
+ public bool HasSshKey(String fingerprint)
+ {
+ return SshKey.FindByFingerprint(fingerprint) != null;
+ }
+
+ public SshModel GetSshList(String name)
+ {
+ var user = User.FindByName(name);
+ if (user == null) return null;
+
+ return new Models.SshModel
+ {
+ Username = user.Name,
+ SshKeys = user.SshKeys.Select(s => new SshModel.SshKey { Name = s.Fingerprint }).ToArray()
+ };
+ }
+ #endregion
+
+ #region Team part
+ public bool UpdateTeam(TeamModel model)
+ {
+ var team = User.FindByName(model.Name);
+ if (team == null) return false;
+
+ team.Nickname = model.Nickname;
+ team.Description = model.Description;
+ team.Save();
+
+ return true;
+ }
+
+ public TeamModel GetTeamModel(String name, bool withMembers = false, String viewUser = null)
+ {
+ var team = User.FindByName(name);
+ if (team == null) return null;
+
+ var model = new TeamModel
+ {
+ Name = team.Name,
+ Nickname = team.Nickname,
+ Description = team.Description,
+ };
+ if (withMembers)
+ {
+ var list = UserTeam.FindAllByTeamID(team.ID).ToList().Where(e => e.User != null);
+ model.MembersRole = list
+ .Select(s => new TeamModel.UserRole
+ {
+ Name = s.User.Name,
+ IsAdministrator = s.IsAdmin
+ })
+ .OrderBy(s => s.Name, new StringLogicalComparer())
+ .ToArray();
+ model.Members = list.ToDictionary(e => e.User.Name, e => e.User.Nickname);
+
+ var rs = team.Repositories.Where(e => e.Repository.Enable);
+ if (!viewUser.IsNullOrEmpty())
+ {
+ var vu = User.FindByName(viewUser);
+ rs = rs.Where(e => e.Repository.CanViewFor(vu));
+ }
+ model.RepositoriesRole = rs.Select(s => new TeamModel.RepositoryRole
+ {
+ Name = s.RepositoryName,
+ AllowRead = s.AllowRead,
+ AllowWrite = s.AllowWrite,
+ })
+ .OrderBy(s => s.Name, new StringLogicalComparer())
+ .ToArray();
+ model.Repositories = model.RepositoriesRole
+ .Select(s => s.Name)
+ .ToArray();
+ }
+ return model;
+ }
+
+ public bool TeamAddUser(String teamname, String username)
+ {
+ var team = User.FindByName(teamname);
+ if (team == null) return false;
+
+ var user = User.FindByName(username);
+ if (user == null) return false;
+
+ var tu = UserTeam.FindByUserIDAndTeamID(user.ID, team.ID);
+ if (tu == null)
+ {
+ tu = new UserTeam();
+ tu.UserID = user.ID;
+ tu.TeamID = team.ID;
+ tu.Save();
+ }
+
+ return true;
+ }
+
+ public bool TeamRemoveUser(String teamname, String username)
+ {
+ var team = User.FindByName(teamname);
+ if (team == null) return false;
+
+ var user = User.FindByName(username);
+ if (user == null) return false;
+
+ var tu = UserTeam.FindByUserIDAndTeamID(user.ID, team.ID);
+ if (tu == null) return false;
+
+ tu.Delete();
+
+ return true;
+ }
+
+ public bool TeamUserSetAdministrator(String teamname, String username, bool isAdmin)
+ {
+ var team = User.FindByName(teamname);
+ if (team == null) return false;
+
+ var user = User.FindByName(username);
+ if (user == null) return false;
+
+ var tu = UserTeam.FindByUserIDAndTeamID(user.ID, team.ID);
+ if (tu == null) return false;
+
+ tu.IsAdmin = true;
+ tu.Save();
+
+ return true;
+ }
+
+ public String[] SearchTeam(String query)
+ {
+ var p = new PageParameter();
+ var list = User.SearchTeam(query, p);
+ return list.ToList().Select(e => e.Name).ToArray();
+ }
+
+ public bool IsTeamAdministrator(String teamname, String username)
+ {
+ var team = User.FindByName(teamname);
+ if (team == null) return false;
+
+ var user = User.FindByName(username);
+ if (user == null) return false;
+
+ var tu = UserTeam.FindByUserIDAndTeamID(user.ID, team.ID);
+ if (tu == null) return false;
+
+ return tu.IsAdmin;
+ }
+
+ public Boolean DeleteTeam(String name)
+ {
+ var team = User.FindByName(name);
+ if (team == null) return false;
+
+ team.Delete();
+
+ return true;
+ }
+
+ public TeamListModel GetTeamList(String keyword, int page, int pagesize = 20)
+ {
+ var p = new PageParameter();
+ p.PageIndex = page;
+ p.PageSize = pagesize;
+ var list = User.SearchTeam(keyword, p);
+
+ var model = new TeamListModel
+ {
+ Teams = list.ToList().Select(s => new TeamModel
+ {
+ Name = s.Name,
+ Nickname = s.Nickname,
+ Description = s.Description,
+ })
+ .ToArray(),
+ CurrentPage = page,
+ ItemCount = p.TotalCount,
+ };
+ return model;
+ }
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Data/RepositoryService.cs b/GitCandy.Web/Data/RepositoryService.cs
new file mode 100644
index 0000000..f632d2b
--- /dev/null
+++ b/GitCandy.Web/Data/RepositoryService.cs
@@ -0,0 +1,345 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using GitCandy.Base;
+using GitCandy.Models;
+using NewLife.Data;
+using NewLife.GitCandy.Entity;
+
+namespace GitCandy.Data
+{
+ public class RepositoryService
+ {
+ public Repository Create(RepositoryModel model, Int32 uid, out Boolean badName)
+ {
+ badName = false;
+ var repo = Repository.FindByUserIDAndName(uid, model.Name);
+ if (repo != null)
+ {
+ badName = true;
+ return null;
+ }
+
+ repo = new Repository
+ {
+ Name = model.Name,
+ Description = model.Description,
+ UserID = uid,
+ CreateTime = DateTime.UtcNow,
+ IsPrivate = model.IsPrivate,
+ AllowAnonymousRead = model.AllowAnonymousRead,
+ AllowAnonymousWrite = model.AllowAnonymousWrite,
+ };
+ repo.Save();
+
+ var ur = new UserRepository();
+ ur.UserID = uid;
+ ur.RepositoryID = repo.ID;
+ ur.IsOwner = true;
+ ur.Save();
+
+ return repo;
+ }
+
+ public RepositoryModel Get(String owner, String reponame, Boolean withShipment = false, String username = null)
+ {
+ var repo = Repository.FindByOwnerAndName(owner, reponame);
+ if (repo == null) return null;
+
+ var model = new RepositoryModel
+ {
+ Name = repo.Name,
+ Description = repo.Description,
+ IsPrivate = repo.IsPrivate,
+ AllowAnonymousRead = repo.AllowAnonymousRead,
+ AllowAnonymousWrite = repo.AllowAnonymousWrite,
+ };
+ if (withShipment || username != null)
+ {
+ var tempList = UserRepository.FindAllByRepositoryID(repo.ID).ToList().Where(e => e.User != null);
+
+ if (withShipment)
+ {
+ model.Collaborators = tempList
+ .Where(s => !s.User.IsTeam)
+ .OrderBy(s => s.User.Name)
+ .ToDictionary(e => e.User.Name, e => e.User.Nickname);
+ model.Teams = tempList
+ .Where(s => s.User.IsTeam)
+ .OrderBy(s => s.User.Name)
+ .ToDictionary(e => e.User.Name, e => e.User.Nickname);
+ }
+ if (username != null)
+ {
+ model.CurrentUserIsOwner = tempList
+ .Any(s => !s.User.IsTeam && s.IsOwner && s.User.Name == username);
+ }
+ }
+ return model;
+ }
+
+ public Boolean Update(String owner, RepositoryModel model)
+ {
+ var repo = Repository.FindByOwnerAndName(owner, model.Name);
+ if (repo == null) return false;
+
+ repo.IsPrivate = model.IsPrivate;
+ repo.AllowAnonymousRead = model.AllowAnonymousRead;
+ repo.AllowAnonymousWrite = model.AllowAnonymousWrite;
+ repo.Description = model.Description;
+
+ repo.Save();
+
+ return true;
+ }
+
+ public CollaborationModel GetRepositoryCollaborationModel(String owner, String name)
+ {
+ var repo = Repository.FindByOwnerAndName(owner, name);
+ if (repo == null) return null;
+
+ var list = UserRepository.FindAllByRepositoryID(repo.ID).ToList();
+ var model = new CollaborationModel
+ {
+ RepositoryName = repo.Name,
+ Users = list.Where(e => !e.User.IsTeam)
+ .Select(s => new CollaborationModel.UserRole
+ {
+ Name = s.User.Name,
+ AllowRead = s.AllowRead,
+ AllowWrite = s.AllowWrite,
+ IsOwner = s.IsOwner,
+ })
+ .OrderBy(s => s.Name, new StringLogicalComparer())
+ .ToArray(),
+ Teams = list.Where(e => e.User.IsTeam)
+ .Select(s => new CollaborationModel.TeamRole
+ {
+ Name = s.User.Name,
+ AllowRead = s.AllowRead,
+ AllowWrite = s.AllowWrite,
+ })
+ .OrderBy(s => s.Name, new StringLogicalComparer())
+ .ToArray(),
+ };
+ return model;
+ }
+
+ public UserRepository RepositoryAddUser(String owner, String reponame, String username)
+ {
+ var repo = Repository.FindByOwnerAndName(owner, reponame);
+ if (repo == null) return null;
+
+ var user = User.FindByName(username);
+ if (user == null) return null;
+
+ var role = UserRepository.FindByUserIDAndRepositoryID(user.ID, repo.ID);
+ if (role != null) return role;
+
+ role = new UserRepository
+ {
+ RepositoryID = repo.ID,
+ UserID = user.ID,
+ AllowRead = true,
+ AllowWrite = true,
+ IsOwner = false,
+ };
+ role.Save();
+
+ return role;
+ }
+
+ public Boolean RepositoryRemoveUser(String owner, String reponame, String username)
+ {
+ var repo = Repository.FindByOwnerAndName(owner, reponame);
+ if (repo == null) return false;
+
+ var user = User.FindByName(username);
+ if (user == null) return false;
+
+ var role = UserRepository.FindByUserIDAndRepositoryID(user.ID, repo.ID);
+ if (role == null) return false;
+
+ role.Delete();
+
+ return true;
+ }
+
+ public Boolean RepositoryUserSetValue(String owner, String reponame, String username, String field, Boolean value)
+ {
+ var repo = Repository.FindByOwnerAndName(owner, reponame);
+ if (repo == null) return false;
+
+ var user = User.FindByName(username);
+ if (user == null) return false;
+
+ var role = UserRepository.FindByUserIDAndRepositoryID(user.ID, repo.ID);
+ if (role == null) return false;
+
+ if (field == "read")
+ role.AllowRead = value;
+ else if (field == "write")
+ role.AllowWrite = value;
+ else if (field == "owner")
+ role.IsOwner = value;
+ else
+ return false;
+
+ role.Save();
+
+ return true;
+ }
+
+ public Boolean Delete(String owner, String name)
+ {
+ var repo = Repository.FindByOwnerAndName(owner, name);
+ if (repo == null) return false;
+
+ repo.Delete();
+
+ return true;
+ }
+
+ public Boolean IsRepositoryAdministrator(String owner, String reponame, String username)
+ {
+ var repo = Repository.FindByOwnerAndName(owner, reponame);
+ if (repo == null) return false;
+
+ var user = User.FindByName(username);
+ if (user == null) return false;
+
+ var role = UserRepository.FindByUserIDAndRepositoryID(user.ID, repo.ID);
+ if (role == null) return false;
+
+ return role.IsOwner;
+ }
+
+ private Boolean CheckReadWrite(Repository repo, User user, Boolean write)
+ {
+ //var repo = Repository.FindByOwnerAndName(owner, reponame);
+ if (repo == null) return false;
+ if (repo.AllowAnonymousRead && (!write || repo.AllowAnonymousWrite)) return true;
+
+ if (user == null) return false;
+ if (user.IsAdmin) return true;
+
+ // 个人权限
+ var role = UserRepository.FindByUserIDAndRepositoryID(user.ID, repo.ID);
+ if (role != null && role.AllowRead && (!write || role.AllowWrite)) return true;
+
+ // 团队权限
+ foreach (var item in user.Teams)
+ {
+ role = UserRepository.FindByUserIDAndRepositoryID(item.TeamID, repo.ID);
+ if (role != null && role.AllowRead && (!write || role.AllowWrite)) return true;
+ }
+
+ return false;
+ }
+
+ public Boolean CanReadRepository(String owner, String reponame, String username)
+ {
+ var repo = Repository.FindByOwnerAndName(owner, reponame);
+ if (repo == null) return false;
+ if (repo.AllowAnonymousRead && repo.AllowAnonymousWrite) return true;
+
+ var user = User.FindByName(username);
+ if (user == null) return false;
+ if (user.IsAdmin) return true;
+
+ return CheckReadWrite(repo, user, false);
+ }
+
+ public Boolean CanWriteRepository(String owner, String reponame, String username)
+ {
+ var repo = Repository.FindByOwnerAndName(owner, reponame);
+ if (repo == null) return false;
+ if (repo.AllowAnonymousRead && repo.AllowAnonymousWrite) return true;
+
+ var user = User.FindByName(username);
+ if (user == null) return false;
+ if (user.IsAdmin) return true;
+
+ return CheckReadWrite(repo, user, true);
+ }
+
+ public Boolean CanReadRepository(String owner, String reponame, String fingerprint, String publickey)
+ {
+ var repo = Repository.FindByOwnerAndName(owner, reponame);
+ if (repo == null) return false;
+ if (repo.AllowAnonymousRead) return true;
+
+ var ssh = SshKey.FindByFingerprint(fingerprint);
+ if (ssh == null || ssh.PublicKey != publickey) return false;
+
+ var user = ssh.User;
+ if (user == null) return false;
+ if (user.IsAdmin) return true;
+
+ return CheckReadWrite(repo, user, false);
+ }
+
+ public Boolean CanWriteRepository(String owner, String reponame, String fingerprint, String publickey)
+ {
+ var repo = Repository.FindByOwnerAndName(owner, reponame);
+ if (repo == null) return false;
+ if (repo.AllowAnonymousRead && repo.AllowAnonymousWrite) return true;
+
+ var ssh = SshKey.FindByFingerprint(fingerprint);
+ if (ssh == null || ssh.PublicKey != publickey) return false;
+
+ var user = ssh.User;
+ if (user == null) return false;
+ if (user.IsAdmin) return true;
+
+ return CheckReadWrite(repo, user, true);
+ }
+
+ public RepositoryListModel GetRepositories(String username, Boolean showAll, PageParameter param)
+ {
+ var model = new RepositoryListModel();
+
+ // 默认按照最后更新时间降序
+ if (param.Sort.IsNullOrEmpty())
+ {
+ param.Sort = "LastCommit";
+ param.Desc = true;
+ }
+
+ if (String.IsNullOrEmpty(username))
+ {
+ model.Collaborations = new RepositoryModel[0];
+ model.Repositories = ToRepositoryArray(Repository.GetPublics(param));
+ }
+ else
+ {
+ var user = User.FindByName(username);
+ var q1 = user.Repositories.Select(e => e.Repository);
+ var q2 = user.Teams.SelectMany(s => s.Team.Repositories.Select(e => e.Repository));
+ var q3 = q1.Union(q2);
+ q3 = q3.OrderByDescending(e => e.LastCommit);
+
+ model.Collaborations = ToRepositoryArray(q3);
+ var list = Repository.Search(!showAll, q3.Select(e => e.ID), param);
+ model.Repositories = ToRepositoryArray(list);
+ }
+
+ return model;
+ }
+
+ private RepositoryModel[] ToRepositoryArray(IEnumerable<Repository> source)
+ {
+ return source.Select(s => new RepositoryModel
+ {
+ Name = s.Name,
+ Description = s.Description,
+ Commits = s.Commits,
+ Branches = s.Branches,
+ Contributors = s.Contributors,
+ LastCommit = s.LastCommit,
+ Views = s.Views,
+ LastView = s.LastView,
+ }).ToArray();
+ }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Extensions/CommitLogExtension.cs b/GitCandy.Web/Extensions/CommitLogExtension.cs
new file mode 100644
index 0000000..1113696
--- /dev/null
+++ b/GitCandy.Web/Extensions/CommitLogExtension.cs
@@ -0,0 +1,43 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web.Mvc;
+using System.Web.Mvc.Html;
+using LibGit2Sharp;
+using NewLife.GitCandy.Entity;
+
+namespace GitCandy.Extensions
+{
+ public static class CommitLogExtension
+ {
+ public static IEnumerable<Commit> PathFilter(this IEnumerable<Commit> log, String path)
+ {
+ if (String.IsNullOrEmpty(path))
+ return log;
+
+ return log.Where(s =>
+ {
+ var pathEntry = s[path];
+ var parent = s.Parents.FirstOrDefault();
+ if (parent == null)
+ return pathEntry != null;
+
+ var parentPathEntry = parent[path];
+ if (pathEntry == null && parentPathEntry == null)
+ return false;
+ if (pathEntry != null && parentPathEntry != null)
+ return pathEntry.Target.Sha != parentPathEntry.Target.Sha;
+ return true;
+ });
+ }
+
+ public static MvcHtmlString Link(this HtmlHelper html, Signature sign)
+ {
+ var user = User.FindByName(sign.Name) ?? User.FindByEmail(sign.Email);
+ if (user != null)
+ return html.ActionLink(user + "", "Detail", "Account", new { name = user.Name }, new { target = "_blank" });
+ else
+ return new MvcHtmlString(sign.Name);
+ }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Extensions/HtmlHelperExtension.cs b/GitCandy.Web/Extensions/HtmlHelperExtension.cs
new file mode 100644
index 0000000..204107c
--- /dev/null
+++ b/GitCandy.Web/Extensions/HtmlHelperExtension.cs
@@ -0,0 +1,63 @@
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Web.Mvc;
+using System.Web.Mvc.Html;
+using System.Web.Routing;
+
+namespace GitCandy.Extensions
+{
+ public static class HtmlHelperExtension
+ {
+ public static RouteValueDictionary OverRoute(this HtmlHelper helper, object routeValues = null, bool withQuery = false)
+ {
+ var old = helper.ViewContext.RouteData.Values;
+
+ if (routeValues == null)
+ return old;
+
+ var over = new Dictionary<String, object>(old, StringComparer.OrdinalIgnoreCase);
+ if (withQuery)
+ {
+ var qs = helper.ViewContext.HttpContext.Request.QueryString;
+ foreach (String key in qs)
+ over[key] = qs[key];
+ }
+ var values = new RouteValueDictionary(routeValues);
+ foreach (var pair in values)
+ over[pair.Key] = pair.Value;
+
+ return new RouteValueDictionary(over);
+ }
+
+ public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper, String linkText, String actionName, RouteValueDictionary routeValues, object htmlAttributes)
+ {
+ return LinkExtensions.ActionLink(htmlHelper, linkText, actionName, routeValues, htmlAttributes.CastToDictionary());
+ }
+
+ public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper, String linkText, String actionName, String controllerName, RouteValueDictionary routeValues, object htmlAttributes)
+ {
+ return LinkExtensions.ActionLink(htmlHelper, linkText, actionName, controllerName, routeValues, htmlAttributes.CastToDictionary());
+ }
+
+ public static MvcHtmlString CultureActionLink(this HtmlHelper htmlHelper, String langName)
+ {
+ var culture = CultureInfo.CreateSpecificCulture(langName);
+ var displayName = culture.Name.StartsWith("en")
+ ? culture.NativeName
+ : culture.EnglishName + " - " + culture.NativeName;
+
+ return LinkExtensions.ActionLink(htmlHelper, displayName, "Language", "Home", new { Lang = culture.Name }, null);
+ }
+
+ public static dynamic GetRootViewBag(this HtmlHelper html)
+ {
+ var controller = html.ViewContext.Controller;
+ while (controller.ControllerContext.IsChildAction)
+ {
+ controller = controller.ControllerContext.ParentActionViewContext.Controller;
+ }
+ return controller.ViewBag;
+ }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Extensions/MetadataExtension.cs b/GitCandy.Web/Extensions/MetadataExtension.cs
new file mode 100644
index 0000000..68b1d57
--- /dev/null
+++ b/GitCandy.Web/Extensions/MetadataExtension.cs
@@ -0,0 +1,194 @@
+using GitCandy.App_GlobalResources;
+using LibGit2Sharp;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Diagnostics.Contracts;
+using System.IO;
+using System.Linq;
+using System.Security.Cryptography;
+using System.Text;
+using System.Web.Mvc;
+
+namespace GitCandy.Extensions
+{
+ public static class MetadataExtension
+ {
+ const int ShaBytesLength = 20;
+ const String HexValuesInUppercase = "0123456789ABCDEF";
+ const String HexValuesInLowercase = "0123456789abcdef";
+
+ public static byte[] AggregateSha(this byte[] one, params byte[][] twos)
+ {
+ Contract.Requires(one == null);
+ Contract.Requires(one.Length == ShaBytesLength);
+
+ var val = one.ToArray();
+ foreach (var two in twos)
+ {
+ Contract.Assert(two != null && two.Length == ShaBytesLength);
+ for (int i = 0; i < ShaBytesLength; i++)
+ {
+ val[i] ^= two[i];
+ }
+ }
+
+ return val;
+ }
+
+ public static String BytesToString(this byte[] bytes)
+ {
+ Contract.Requires(bytes != null);
+
+ var length = bytes.Length;
+ var chars = new char[length * 2];
+ for (int i = 0, index = 0; i < length; i++)
+ {
+ var b = bytes[i];
+ chars[index++] = HexValuesInLowercase[b & 0xf];
+ chars[index++] = HexValuesInLowercase[b >> 4];
+ }
+
+ return new String(chars);
+ }
+
+ public static String ToFlagString(this bool flag, String trueStr, String falseStr)
+ {
+ return flag ? trueStr : falseStr;
+ }
+
+ public static Dictionary<String, object> CastToDictionary(this object values)
+ {
+ if (values == null)
+ return null;
+
+ var dictionary = new Dictionary<String, object>(StringComparer.OrdinalIgnoreCase);
+ var properties = TypeDescriptor.GetProperties(values);
+ foreach (PropertyDescriptor propertyDescriptor in properties)
+ {
+ var value = propertyDescriptor.GetValue(values);
+ dictionary.Add(propertyDescriptor.Name, value);
+ }
+ return dictionary;
+ }
+
+ public static String ToShortSha(this String sha)
+ {
+ if (sha == null)
+ return null;
+
+ return sha.Length > 7 && sha.All(c => '0' <= c && c <= '9' || 'a' <= c && c <= 'f' || 'A' <= c && c <= 'F')
+ ? sha.Substring(0, 7)
+ : sha;
+ }
+
+ public static IEnumerable<SelectListItem> ToSelectListItem(this IEnumerable<String> items, String selected)
+ {
+ return items.Select(s => new SelectListItem
+ {
+ Text = s,
+ Selected = s == selected,
+ });
+ }
+
+ public static String CalcSha(this String str)
+ {
+ var sha = new SHA1CryptoServiceProvider();
+ var data = Encoding.UTF8.GetBytes(str);
+ data = sha.ComputeHash(data);
+ return data.BytesToString();
+ }
+
+ public static String RepetitionIfEmpty(this String str, String repetition)
+ {
+ return String.IsNullOrWhiteSpace(str)
+ ? repetition
+ : str;
+ }
+
+ public static String ShortString(this String str, int length)
+ {
+ var wide = 0;
+ var len = 0;
+ foreach (var ch in str)
+ {
+ // simple place a wide character
+ wide += ch < 0x1000 ? 1 : 2;
+ len++;
+ if (wide > length)
+ return str.Substring(0, len - 4) + " ...";
+ }
+ return str;
+ }
+
+ public static byte[] ToBytes(this Stream stream)
+ {
+ if (stream == null)
+ return null;
+
+ if (stream is MemoryStream)
+ {
+ var ms = (MemoryStream)stream;
+ return ms.ToArray();
+ }
+
+ var buffer = new byte[16 * 1024];
+ using (var ms = new MemoryStream())
+ {
+ int len;
+ while ((len = stream.Read(buffer, 0, buffer.Length)) > 0)
+ {
+ ms.Write(buffer, 0, len);
+ }
+ return ms.ToArray();
+ }
+ }
+
+ public static String ReadLines(this StringReader reader, int lineCount)
+ {
+ var sb = new StringBuilder();
+ while (lineCount-- > 0)
+ {
+ sb.Append(reader.ReadLine());
+ if (lineCount > 0)
+ sb.AppendLine();
+ }
+ return sb.ToString();
+ }
+
+ public static String ToLocateString(this ChangeKind changeKind)
+ {
+ switch (changeKind)
+ {
+ case ChangeKind.Added:
+ return SR.Repository_FileAdded;
+ case ChangeKind.Copied:
+ return SR.Repository_FileCopied;
+ case ChangeKind.Deleted:
+ return SR.Repository_FileDeleted;
+ case ChangeKind.Ignored:
+ return SR.Repository_FileIgnored;
+ case ChangeKind.Modified:
+ return SR.Repository_FileModified;
+ case ChangeKind.Renamed:
+ return SR.Repository_FileRenamed;
+ case ChangeKind.TypeChanged:
+ return SR.Repository_FileTypeChanged;
+ case ChangeKind.Unmodified:
+ return SR.Repository_FileUnmodified;
+ case ChangeKind.Untracked:
+ return SR.Repository_FileUntracked;
+ default:
+ return String.Empty;
+ }
+ }
+
+ [Pure]
+ public static String SafyToString(this object obj)
+ {
+ if (obj == null)
+ return null;
+ return obj.ToString();
+ }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/favicon.ico b/GitCandy.Web/favicon.ico
new file mode 100644
index 0000000..10ea33c
Binary files /dev/null and b/GitCandy.Web/favicon.ico differ
diff --git a/GitCandy.Web/Filters/AdministratorAttribute.cs b/GitCandy.Web/Filters/AdministratorAttribute.cs
new file mode 100644
index 0000000..7e5d685
--- /dev/null
+++ b/GitCandy.Web/Filters/AdministratorAttribute.cs
@@ -0,0 +1,17 @@
+using GitCandy.Controllers;
+using System.Web.Mvc;
+
+namespace GitCandy.Filters
+{
+ public class AdministratorAttribute : SmartAuthorizeAttribute
+ {
+ public override void OnAuthorization(AuthorizationContext filterContext)
+ {
+ base.OnAuthorization(filterContext);
+
+ var controller = filterContext.Controller as CandyControllerBase;
+ if (controller == null || controller.Token == null || !controller.Token.IsSystemAdministrator)
+ HandleUnauthorizedRequest(filterContext);
+ }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Filters/AllowRegisterUserAttribute.cs b/GitCandy.Web/Filters/AllowRegisterUserAttribute.cs
new file mode 100644
index 0000000..e556d89
--- /dev/null
+++ b/GitCandy.Web/Filters/AllowRegisterUserAttribute.cs
@@ -0,0 +1,24 @@
+using GitCandy.Configuration;
+using GitCandy.Controllers;
+using System.Web.Mvc;
+
+namespace GitCandy.Filters
+{
+ public class AllowRegisterUserAttribute : SmartAuthorizeAttribute
+ {
+ public override void OnAuthorization(AuthorizationContext filterContext)
+ {
+ base.OnAuthorization(filterContext);
+
+ var controller = filterContext.Controller as CandyControllerBase;
+ var currentUser = controller == null ? null : controller.Token;
+ if (currentUser != null && currentUser.IsSystemAdministrator)
+ return;
+
+ if (currentUser == null && UserConfiguration.Current.AllowRegisterUser)
+ return;
+
+ HandleUnauthorizedRequest(filterContext);
+ }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Filters/AllowRepositoryCreationAttribute.cs b/GitCandy.Web/Filters/AllowRepositoryCreationAttribute.cs
new file mode 100644
index 0000000..7e655a8
--- /dev/null
+++ b/GitCandy.Web/Filters/AllowRepositoryCreationAttribute.cs
@@ -0,0 +1,22 @@
+using GitCandy.Configuration;
+using GitCandy.Controllers;
+using System.Web.Mvc;
+
+namespace GitCandy.Filters
+{
+ public class AllowRepositoryCreationAttribute : SmartAuthorizeAttribute
+ {
+ public override void OnAuthorization(AuthorizationContext filterContext)
+ {
+ base.OnAuthorization(filterContext);
+
+ var controller = filterContext.Controller as CandyControllerBase;
+ if (controller != null && controller.Token != null
+ && (UserConfiguration.Current.AllowRepositoryCreation
+ || controller.Token.IsSystemAdministrator))
+ return;
+
+ HandleUnauthorizedRequest(filterContext);
+ }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Filters/CurrentUserOrAdministratorAttribute.cs b/GitCandy.Web/Filters/CurrentUserOrAdministratorAttribute.cs
new file mode 100644
index 0000000..185261b
--- /dev/null
+++ b/GitCandy.Web/Filters/CurrentUserOrAdministratorAttribute.cs
@@ -0,0 +1,27 @@
+using GitCandy.Controllers;
+using System.Web.Mvc;
+using System;
+
+namespace GitCandy.Filters
+{
+ public class CurrentUserOrAdministratorAttribute : SmartAuthorizeAttribute
+ {
+ public override void OnAuthorization(AuthorizationContext filterContext)
+ {
+ base.OnAuthorization(filterContext);
+
+ var controller = filterContext.Controller as CandyControllerBase;
+ if (controller != null && controller.Token != null)
+ {
+ if (controller.Token.IsSystemAdministrator)
+ return;
+
+ var field = filterContext.Controller.ValueProvider.GetValue("name");
+ if (field == null || String.IsNullOrEmpty(field.AttemptedValue) || controller.Token.Username == field.AttemptedValue)
+ return;
+ }
+
+ HandleUnauthorizedRequest(filterContext);
+ }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Filters/PublicServerAttribute.cs b/GitCandy.Web/Filters/PublicServerAttribute.cs
new file mode 100644
index 0000000..0837ebd
--- /dev/null
+++ b/GitCandy.Web/Filters/PublicServerAttribute.cs
@@ -0,0 +1,32 @@
+using GitCandy.Configuration;
+using GitCandy.Controllers;
+using System.Web.Mvc;
+
+namespace GitCandy.Filters
+{
+ public class PublicServerAttribute : SmartAuthorizeAttribute
+ {
+ public override void OnAuthorization(AuthorizationContext filterContext)
+ {
+ if (UserConfiguration.Current.IsPublicServer)
+ return;
+
+ bool skipAuthorization =
+ filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true)
+ || filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true)
+ || filterContext.ActionDescriptor.IsDefined(typeof(SmartGitAttribute), true)
+ || filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(SmartGitAttribute), true);
+
+ if (skipAuthorization)
+ return;
+
+ base.OnAuthorization(filterContext);
+
+ var controller = filterContext.Controller as CandyControllerBase;
+ if (controller != null && controller.Token != null)
+ return;
+
+ HandleUnauthorizedRequest(filterContext);
+ }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Filters/ReadRepositoryAttribute.cs b/GitCandy.Web/Filters/ReadRepositoryAttribute.cs
new file mode 100644
index 0000000..0936398
--- /dev/null
+++ b/GitCandy.Web/Filters/ReadRepositoryAttribute.cs
@@ -0,0 +1,36 @@
+using GitCandy.Controllers;
+using System.Web.Mvc;
+
+namespace GitCandy.Filters
+{
+ public class ReadRepositoryAttribute : SmartAuthorizeAttribute
+ {
+ private bool requireWrite;
+
+ public ReadRepositoryAttribute(bool requireWrite = false)
+ {
+ this.requireWrite = requireWrite;
+ }
+
+ public override void OnAuthorization(AuthorizationContext filterContext)
+ {
+ base.OnAuthorization(filterContext);
+
+ var controller = filterContext.Controller as CandyControllerBase;
+
+ var repoController = controller as RepositoryController;
+ if (repoController != null)
+ {
+ var username = controller.Token == null ? null : controller.Token.Username;
+ var owner = controller.ValueProvider.GetValue("owner");
+ var field = controller.ValueProvider.GetValue("name");
+ var canRead = owner != null && field != null && (requireWrite
+ ? repoController.RepositoryService.CanWriteRepository(owner.AttemptedValue, field.AttemptedValue, username)
+ : repoController.RepositoryService.CanReadRepository(owner.AttemptedValue, field.AttemptedValue, username));
+ if (canRead) return;
+ }
+
+ HandleUnauthorizedRequest(filterContext);
+ }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Filters/RepositoryOwnerOrSystemAdministratorAttribute.cs b/GitCandy.Web/Filters/RepositoryOwnerOrSystemAdministratorAttribute.cs
new file mode 100644
index 0000000..f3e51d5
--- /dev/null
+++ b/GitCandy.Web/Filters/RepositoryOwnerOrSystemAdministratorAttribute.cs
@@ -0,0 +1,31 @@
+using GitCandy.Controllers;
+using System.Web.Mvc;
+
+namespace GitCandy.Filters
+{
+ public class RepositoryOwnerOrSystemAdministratorAttribute : SmartAuthorizeAttribute
+ {
+ public override void OnAuthorization(AuthorizationContext filterContext)
+ {
+ base.OnAuthorization(filterContext);
+
+ var controller = filterContext.Controller as CandyControllerBase;
+ if (controller != null && controller.Token != null)
+ {
+ if (controller.Token.IsSystemAdministrator)
+ return;
+
+ var repoController = controller as RepositoryController;
+ if (repoController != null)
+ {
+ var owner = controller.ValueProvider.GetValue("owner");
+ var field = controller.ValueProvider.GetValue("name");
+ var isAdmin = field != null && repoController.RepositoryService.IsRepositoryAdministrator(owner.AttemptedValue, field.AttemptedValue, controller.Token.Username);
+ if (isAdmin) return;
+ }
+ }
+
+ HandleUnauthorizedRequest(filterContext);
+ }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Filters/SmartAuthorizeAttribute.cs b/GitCandy.Web/Filters/SmartAuthorizeAttribute.cs
new file mode 100644
index 0000000..8d7c43a
--- /dev/null
+++ b/GitCandy.Web/Filters/SmartAuthorizeAttribute.cs
@@ -0,0 +1,38 @@
+using GitCandy.Controllers;
+using System;
+using System.Web;
+using System.Web.Mvc;
+
+namespace GitCandy.Filters
+{
+ public class SmartAuthorizeAttribute : AuthorizeAttribute
+ {
+ public override void OnAuthorization(AuthorizationContext filterContext)
+ {
+ }
+
+ protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
+ {
+ var controller = filterContext.Controller as CandyControllerBase;
+ if (controller == null || controller.Token == null)
+ {
+ var helper = new UrlHelper(filterContext.RequestContext);
+
+ var retUrl = filterContext.HttpContext.Request.Url.PathAndQuery;
+ var retObj = (String.IsNullOrEmpty(retUrl) || retUrl == "/")
+ ? null
+ : new { ReturnUrl = filterContext.HttpContext.Request.Url.PathAndQuery };
+
+ filterContext.Result = new RedirectResult(helper.Action("Login", "Account", retObj));
+ }
+ else if (controller.Token.IsSystemAdministrator)
+ {
+ throw new HttpException(404, "Project not found.");
+ }
+ else
+ {
+ throw new UnauthorizedAccessException();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Filters/SmartGitAttribute.cs b/GitCandy.Web/Filters/SmartGitAttribute.cs
new file mode 100644
index 0000000..e6862bb
--- /dev/null
+++ b/GitCandy.Web/Filters/SmartGitAttribute.cs
@@ -0,0 +1,91 @@
+using System;
+using System.Text;
+using System.Web.Mvc;
+using GitCandy.Configuration;
+using GitCandy.Controllers;
+using UserX = NewLife.GitCandy.Entity.User;
+
+namespace GitCandy.Filters
+{
+ public class SmartGitAttribute : SmartAuthorizeAttribute
+ {
+ private const String AuthKey = "GitCandyGitAuthorize";
+
+ public override void OnAuthorization(AuthorizationContext filterContext)
+ {
+ base.OnAuthorization(filterContext);
+
+ var controller = filterContext.Controller as GitController;
+ if (controller == null) return;
+
+ // git.exe not accept cookies as well as no session available
+ var username = controller.Session[AuthKey] as String;
+ if (username == null)
+ {
+ var token = controller.Token;
+ if (token != null) username = token.Username;
+ }
+ if (username == null)
+ {
+ var auth = controller.HttpContext.Request.Headers["Authorization"];
+
+ if (!String.IsNullOrEmpty(auth))
+ {
+ var bytes = Convert.FromBase64String(auth.Substring(6));
+ var certificate = Encoding.ASCII.GetString(bytes);
+ var index = certificate.IndexOf(':');
+ var password = certificate.Substring(index + 1);
+ username = certificate.Substring(0, index);
+
+ var user = UserX.Check(username, password);
+ username = user != null ? user.Name : null;
+ }
+ }
+
+ controller.Session[AuthKey] = username;
+
+ if (username == null && !UserConfiguration.Current.IsPublicServer)
+ {
+ HandleUnauthorizedRequest(filterContext);
+ return;
+ }
+
+ var right = false;
+
+ var owner = controller.ValueProvider.GetValue("owner")?.AttemptedValue;
+ var project = controller.ValueProvider.GetValue("project")?.AttemptedValue;
+ var service = controller.ValueProvider.GetValue("service")?.AttemptedValue;
+
+ if (String.IsNullOrEmpty(service)) // redirect to git browser
+ {
+ right = true;
+ }
+ else if (String.Equals(service, "git-receive-pack", StringComparison.OrdinalIgnoreCase)) // git push
+ {
+ right = controller.RepositoryService.CanWriteRepository(owner, project, username);
+ }
+ else if (String.Equals(service, "git-upload-pack", StringComparison.OrdinalIgnoreCase)) // git fetch
+ {
+ right = controller.RepositoryService.CanReadRepository(owner, project, username);
+ }
+
+ if (!right)
+ HandleUnauthorizedRequest(filterContext);
+ }
+
+ protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
+ {
+ var controller = filterContext.Controller as CandyControllerBase;
+ if (controller == null || controller.Token == null)
+ {
+ filterContext.HttpContext.Response.Clear();
+ filterContext.HttpContext.Response.AddHeader("WWW-Authenticate", "Basic realm=\"GitCandy\"");
+ filterContext.Result = new HttpUnauthorizedResult();
+ }
+ else
+ {
+ throw new UnauthorizedAccessException();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Filters/TeamOrSystemAdministratorAttribute.cs b/GitCandy.Web/Filters/TeamOrSystemAdministratorAttribute.cs
new file mode 100644
index 0000000..5d230bf
--- /dev/null
+++ b/GitCandy.Web/Filters/TeamOrSystemAdministratorAttribute.cs
@@ -0,0 +1,27 @@
+using GitCandy.Controllers;
+using System.Web.Mvc;
+
+namespace GitCandy.Filters
+{
+ public class TeamOrSystemAdministratorAttribute : SmartAuthorizeAttribute
+ {
+ public override void OnAuthorization(AuthorizationContext filterContext)
+ {
+ base.OnAuthorization(filterContext);
+
+ var controller = filterContext.Controller as CandyControllerBase;
+ if (controller != null && controller.Token != null)
+ {
+ if (controller.Token.IsSystemAdministrator)
+ return;
+
+ var field = controller.ValueProvider.GetValue("name");
+ var isAdmin = field != null && controller.MembershipService.IsTeamAdministrator(field.AttemptedValue, controller.Token.Username);
+ if (isAdmin)
+ return;
+ }
+
+ HandleUnauthorizedRequest(filterContext);
+ }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/fonts/glyphicons-halflings-regular.eot b/GitCandy.Web/fonts/glyphicons-halflings-regular.eot
new file mode 100644
index 0000000..b93a495
Binary files /dev/null and b/GitCandy.Web/fonts/glyphicons-halflings-regular.eot differ
diff --git a/GitCandy.Web/fonts/glyphicons-halflings-regular.svg b/GitCandy.Web/fonts/glyphicons-halflings-regular.svg
new file mode 100644
index 0000000..94fb549
--- /dev/null
+++ b/GitCandy.Web/fonts/glyphicons-halflings-regular.svg
@@ -0,0 +1,288 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
+<font-face units-per-em="1200" ascent="960" descent="-240" />
+<missing-glyph horiz-adv-x="500" />
+<glyph horiz-adv-x="0" />
+<glyph horiz-adv-x="400" />
+<glyph unicode=" " />
+<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" />
+<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode=" " />
+<glyph unicode="¥" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" />
+<glyph unicode=" " horiz-adv-x="650" />
+<glyph unicode=" " horiz-adv-x="1300" />
+<glyph unicode=" " horiz-adv-x="650" />
+<glyph unicode=" " horiz-adv-x="1300" />
+<glyph unicode=" " horiz-adv-x="433" />
+<glyph unicode=" " horiz-adv-x="325" />
+<glyph unicode=" " horiz-adv-x="216" />
+<glyph unicode=" " horiz-adv-x="216" />
+<glyph unicode=" " horiz-adv-x="162" />
+<glyph unicode=" " horiz-adv-x="260" />
+<glyph unicode=" " horiz-adv-x="72" />
+<glyph unicode=" " horiz-adv-x="260" />
+<glyph unicode=" " horiz-adv-x="325" />
+<glyph unicode="€" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" />
+<glyph unicode="₽" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" />
+<glyph unicode="−" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="⌛" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" />
+<glyph unicode="◼" horiz-adv-x="500" d="M0 0z" />
+<glyph unicode="☁" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" />
+<glyph unicode="⛺" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " />
+<glyph unicode="✉" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" />
+<glyph unicode="✏" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" />
+<glyph unicode="" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" />
+<glyph unicode="" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" />
+<glyph unicode="" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" />
+<glyph unicode="" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" />
+<glyph unicode="" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" />
+<glyph unicode="" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" />
+<glyph unicode="" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" />
+<glyph unicode="" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" />
+<glyph unicode="" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" />
+<glyph unicode="" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" />
+<glyph unicode="" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" />
+<glyph unicode="" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" />
+<glyph unicode="" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" />
+<glyph unicode="" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" />
+<glyph unicode="" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" />
+<glyph unicode="" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" />
+<glyph unicode="" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" />
+<glyph unicode="" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
+<glyph unicode="" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" />
+<glyph unicode="" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" />
+<glyph unicode="" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" />
+<glyph unicode="" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" />
+<glyph unicode="" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" />
+<glyph unicode="" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" />
+<glyph unicode="" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" />
+<glyph unicode="" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" />
+<glyph unicode="" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" />
+<glyph unicode="" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" />
+<glyph unicode="" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
+<glyph unicode="" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
+<glyph unicode="" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" />
+<glyph unicode="" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" />
+<glyph unicode="" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" />
+<glyph unicode="" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" />
+<glyph unicode="" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" />
+<glyph unicode="" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" />
+<glyph unicode="" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" />
+<glyph unicode="" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" />
+<glyph unicode="" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" />
+<glyph unicode="" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" />
+<glyph unicode="" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" />
+<glyph unicode="" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" />
+<glyph unicode="" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" />
+<glyph unicode="" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" />
+<glyph unicode="" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" />
+<glyph unicode="" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" />
+<glyph unicode="" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" />
+<glyph unicode="" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" />
+<glyph unicode="" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" />
+<glyph unicode="" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" />
+<glyph unicode="" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" />
+<glyph unicode="" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" />
+<glyph unicode="" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" />
+<glyph unicode="" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" />
+<glyph unicode="" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" />
+<glyph unicode="" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" />
+<glyph unicode="" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" />
+<glyph unicode="" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" />
+<glyph unicode="" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" />
+<glyph unicode="" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" />
+<glyph unicode="" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" />
+<glyph unicode="" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" />
+<glyph unicode="" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
+<glyph unicode="" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
+<glyph unicode="" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" />
+<glyph unicode="" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" />
+<glyph unicode="" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" />
+<glyph unicode="" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" />
+<glyph unicode="" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" />
+<glyph unicode="" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" />
+<glyph unicode="" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" />
+<glyph unicode="" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" />
+<glyph unicode="" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" />
+<glyph unicode="" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" />
+<glyph unicode="" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" />
+<glyph unicode="" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" />
+<glyph unicode="" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" />
+<glyph unicode="" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" />
+<glyph unicode="" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" />
+<glyph unicode="" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" />
+<glyph unicode="" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" />
+<glyph unicode="" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" />
+<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" />
+<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" />
+<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" />
+<glyph unicode="" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" />
+<glyph unicode="" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" />
+<glyph unicode="" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " />
+<glyph unicode="" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" />
+<glyph unicode="" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" />
+<glyph unicode="" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" />
+<glyph unicode="" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" />
+<glyph unicode="" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" />
+<glyph unicode="" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" />
+<glyph unicode="" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" />
+<glyph unicode="" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" />
+<glyph unicode="" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" />
+<glyph unicode="" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" />
+<glyph unicode="" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" />
+<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " />
+<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " />
+<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" />
+<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" />
+<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" />
+<glyph unicode="" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" />
+<glyph unicode="" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" />
+<glyph unicode="" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
+<glyph unicode="" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" />
+<glyph unicode="" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" />
+<glyph unicode="" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
+<glyph unicode="" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" />
+<glyph unicode="" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
+<glyph unicode="" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" />
+<glyph unicode="" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" />
+<glyph unicode="" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
+<glyph unicode="" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
+<glyph unicode="" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" />
+<glyph unicode="" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
+<glyph unicode="" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
+<glyph unicode="" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" />
+<glyph unicode="" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" />
+<glyph unicode="" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" />
+<glyph unicode="" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" />
+<glyph unicode="" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" />
+<glyph unicode="" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" />
+<glyph unicode="" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" />
+<glyph unicode="" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" />
+<glyph unicode="" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" />
+<glyph unicode="" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" />
+<glyph unicode="" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" />
+<glyph unicode="" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " />
+<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
+<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
+<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" />
+<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" />
+<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" />
+<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" />
+<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" />
+<glyph unicode="" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" />
+<glyph unicode="" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" />
+<glyph unicode="" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" />
+<glyph unicode="" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" />
+<glyph unicode="" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" />
+<glyph unicode="" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" />
+<glyph unicode="" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" />
+<glyph unicode="" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" />
+<glyph unicode="" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" />
+<glyph unicode="" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" />
+<glyph unicode="" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" />
+<glyph unicode="" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" />
+<glyph unicode="" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" />
+<glyph unicode="" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" />
+<glyph unicode="" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" />
+<glyph unicode="" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" />
+<glyph unicode="" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" />
+<glyph unicode="" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " />
+<glyph unicode="" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" />
+<glyph unicode="" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" />
+<glyph unicode="" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" />
+<glyph unicode="" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
+<glyph unicode="" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
+<glyph unicode="" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" />
+<glyph unicode="" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
+<glyph unicode="" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
+<glyph unicode="" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" />
+<glyph unicode="" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" />
+<glyph unicode="" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" />
+<glyph unicode="" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" />
+<glyph unicode="" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" />
+<glyph unicode="" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" />
+<glyph unicode="" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" />
+<glyph unicode="" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" />
+<glyph unicode="" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" />
+<glyph unicode="" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" />
+<glyph unicode="" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" />
+<glyph unicode="" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" />
+<glyph unicode="" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" />
+<glyph unicode="" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" />
+<glyph unicode="" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" />
+<glyph unicode="" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" />
+<glyph unicode="" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" />
+<glyph unicode="" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" />
+<glyph unicode="" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" />
+<glyph unicode="" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" />
+<glyph unicode="" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" />
+<glyph unicode="" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" />
+<glyph unicode="🔑" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" />
+<glyph unicode="🚪" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" />
+</font>
+</defs></svg>
\ No newline at end of file
diff --git a/GitCandy.Web/fonts/glyphicons-halflings-regular.ttf b/GitCandy.Web/fonts/glyphicons-halflings-regular.ttf
new file mode 100644
index 0000000..1413fc6
Binary files /dev/null and b/GitCandy.Web/fonts/glyphicons-halflings-regular.ttf differ
diff --git a/GitCandy.Web/fonts/glyphicons-halflings-regular.woff b/GitCandy.Web/fonts/glyphicons-halflings-regular.woff
new file mode 100644
index 0000000..9e61285
Binary files /dev/null and b/GitCandy.Web/fonts/glyphicons-halflings-regular.woff differ
diff --git a/GitCandy.Web/fonts/glyphicons-halflings-regular.woff2 b/GitCandy.Web/fonts/glyphicons-halflings-regular.woff2
new file mode 100644
index 0000000..64539b5
Binary files /dev/null and b/GitCandy.Web/fonts/glyphicons-halflings-regular.woff2 differ
diff --git a/GitCandy.Web/Git/ArchiverAccessor.cs b/GitCandy.Web/Git/ArchiverAccessor.cs
new file mode 100644
index 0000000..2ba9e57
--- /dev/null
+++ b/GitCandy.Web/Git/ArchiverAccessor.cs
@@ -0,0 +1,105 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using System.IO;
+using System.Text;
+using GitCandy.Base;
+using GitCandy.Configuration;
+using GitCandy.Git.Cache;
+using ICSharpCode.SharpZipLib.Zip;
+using LibGit2Sharp;
+
+namespace GitCandy.Git
+{
+ public class ArchiverAccessor : GitCacheAccessor<String, ArchiverAccessor>
+ {
+ private readonly Commit commit;
+ private readonly Encoding[] encodings;
+ private readonly String newline;
+
+ public ArchiverAccessor(String repoId, Repository repo, Commit commit, String newline, params Encoding[] encodings)
+ : base(repoId, repo)
+ {
+ Contract.Requires(commit != null);
+ Contract.Requires(encodings != null);
+
+ this.commit = commit;
+ this.encodings = encodings;
+ this.newline = newline;
+ }
+
+ public override bool IsAsync { get { return false; } }
+
+ protected override String GetCacheKey()
+ {
+ return GetCacheKey(commit.Sha, newline);
+ }
+
+ protected override void Init()
+ {
+ var info = new FileInfo(Path.Combine(UserConfiguration.Current.CachePath.GetFullPath(), GetCacheFile()));
+ if (!info.Directory.Exists)
+ info.Directory.Create();
+
+ result = info.FullName;
+ }
+
+ protected override void Calculate()
+ {
+ using (var zipOutputStream = new ZipOutputStream(new FileStream(result, FileMode.Create)))
+ {
+ var stack = new Stack<Tree>();
+
+ stack.Push(commit.Tree);
+ while (stack.Count != 0)
+ {
+ var tree = stack.Pop();
+ foreach (var entry in tree)
+ {
+ byte[] bytes;
+ switch (entry.TargetType)
+ {
+ case TreeEntryTargetType.Blob:
+ zipOutputStream.PutNextEntry(new ZipEntry(entry.Path));
+ var blob = (Blob)entry.Target;
+ bytes = blob.GetContentStream().ReadBytes();
+ if (newline == null)
+ zipOutputStream.Write(bytes, 0, bytes.Length);
+ else
+ {
+ var encoding = FileHelper.DetectEncoding(bytes, encodings);
+ if (encoding == null)
+ zipOutputStream.Write(bytes, 0, bytes.Length);
+ else
+ {
+ bytes = FileHelper.ReplaceNewline(bytes, encoding, newline);
+ zipOutputStream.Write(bytes, 0, bytes.Length);
+ }
+ }
+ break;
+ case TreeEntryTargetType.Tree:
+ stack.Push((Tree)entry.Target);
+ break;
+ case TreeEntryTargetType.GitLink:
+ zipOutputStream.PutNextEntry(new ZipEntry(entry.Path + "/.gitsubmodule"));
+ bytes = Encoding.ASCII.GetBytes(entry.Target.Sha);
+ zipOutputStream.Write(bytes, 0, bytes.Length);
+ break;
+ }
+ }
+ }
+ zipOutputStream.SetComment(commit.Sha);
+ }
+ resultDone = true;
+ }
+
+ protected override bool Load()
+ {
+ return File.Exists(result);
+ }
+
+ protected override void Save()
+ {
+ }
+ }
+}
diff --git a/GitCandy.Web/Git/BlameAccessor.cs b/GitCandy.Web/Git/BlameAccessor.cs
new file mode 100644
index 0000000..fd57828
--- /dev/null
+++ b/GitCandy.Web/Git/BlameAccessor.cs
@@ -0,0 +1,80 @@
+using System;
+using System.Diagnostics.Contracts;
+using System.IO;
+using System.Linq;
+using System.Text;
+using GitCandy.Base;
+using GitCandy.Extensions;
+using GitCandy.Git.Cache;
+using GitCandy.Models;
+using LibGit2Sharp;
+
+namespace GitCandy.Git
+{
+ public class BlameAccessor : GitCacheAccessor<BlameHunkModel[], BlameAccessor>
+ {
+ private readonly Commit commit;
+ private readonly String path, code;
+
+ public BlameAccessor(String repoId, Repository repo, Commit commit, String path, params Encoding[] encodings)
+ : base(repoId, repo)
+ {
+ Contract.Requires(commit != null);
+ Contract.Requires(path != null);
+ Contract.Requires(encodings != null);
+ Contract.Requires(commit[path] != null);
+ Contract.Requires(commit[path].TargetType == TreeEntryTargetType.Blob);
+
+ var treeEntry = commit[path];
+
+ this.commit = commit;
+ this.path = path;
+
+ var blob = (Blob)treeEntry.Target;
+ var bytes = blob.GetContentStream().ToBytes();
+ var encoding = FileHelper.DetectEncoding(bytes, encodings);
+ this.code = FileHelper.ReadToEnd(bytes, encoding);
+ }
+
+ protected override String GetCacheKey()
+ {
+ return GetCacheKey(commit.Sha, path);
+ }
+
+ protected override void Init()
+ {
+ result = new BlameHunkModel[]
+ {
+ new BlameHunkModel
+ {
+ Code = code,
+ MessageShort = commit.MessageShort.RepetitionIfEmpty(GitService.UnknowString),
+ Sha = commit.Sha,
+ Author = commit.Author.Name,
+ AuthorEmail = commit.Author.Email,
+ AuthorDate = commit.Author.When,
+ }
+ };
+ }
+
+ protected override void Calculate()
+ {
+ using (var repo = new Repository(this.repoPath))
+ {
+ var reader = new StringReader(code);
+ var blame = repo.Blame(path, new BlameOptions { StartingAt = commit });
+ result = blame.Select(s => new BlameHunkModel
+ {
+ Code = reader.ReadLines(s.LineCount),
+ MessageShort = s.FinalCommit.MessageShort.RepetitionIfEmpty(GitService.UnknowString),
+ Sha = s.FinalCommit.Sha,
+ Author = s.FinalCommit.Author.Name,
+ AuthorEmail = s.FinalCommit.Author.Email,
+ AuthorDate = s.FinalCommit.Author.When,
+ })
+ .ToArray();
+ }
+ resultDone = true;
+ }
+ }
+}
diff --git a/GitCandy.Web/Git/Cache/GitCacheAccessor.cs b/GitCandy.Web/Git/Cache/GitCacheAccessor.cs
new file mode 100644
index 0000000..70630fb
--- /dev/null
+++ b/GitCandy.Web/Git/Cache/GitCacheAccessor.cs
@@ -0,0 +1,332 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using System.IO;
+using System.Linq;
+using System.Runtime.Serialization.Formatters.Binary;
+using System.Threading.Tasks;
+using GitCandy.Configuration;
+using GitCandy.Extensions;
+using LibGit2Sharp;
+using NewLife.Log;
+using NewLife.Threading;
+
+namespace GitCandy.Git.Cache
+{
+ public abstract class GitCacheAccessor
+ {
+ protected static readonly Type[] accessors;
+ protected static readonly object locker = new object();
+ protected static readonly List<GitCacheAccessor> runningList = new List<GitCacheAccessor>();
+
+ protected static bool enabled;
+
+ protected Task task;
+
+ static GitCacheAccessor()
+ {
+ accessors = new[]
+ {
+ typeof(ArchiverAccessor),
+ typeof(BlameAccessor),
+ typeof(CommitsAccessor),
+ typeof(ContributorsAccessor),
+ typeof(HistoryDivergenceAccessor),
+ typeof(LastCommitAccessor),
+ typeof(RepositorySizeAccessor),
+ typeof(ScopeAccessor),
+ typeof(SummaryAccessor),
+ };
+ }
+
+ public static T Singleton<T>(T accessor) where T : GitCacheAccessor
+ {
+ Contract.Requires(accessor != null);
+
+ lock (locker)
+ {
+ var running = runningList.OfType<T>().FirstOrDefault(s => s == accessor);
+ if (running == null)
+ {
+ runningList.Add(accessor);
+ accessor.Init();
+ accessor.LoadOrCalculate();
+ return accessor;
+ }
+ return running;
+ }
+ }
+
+ public static void Initialize()
+ {
+ enabled = false;
+
+ var cachePath = UserConfiguration.Current.CachePath.GetFullPath();
+ if (String.IsNullOrEmpty(cachePath)) return;
+
+ cachePath.EnsureDirectory(false);
+
+ var expectation = GetExpectation();
+ var reality = new String[accessors.Length];
+ var filename = Path.Combine(cachePath, "version");
+ if (File.Exists(filename))
+ {
+ var lines = File.ReadAllLines(filename);
+ Array.Copy(lines, reality, Math.Min(lines.Length, reality.Length));
+ }
+
+ for (int i = 0; i < reality.Length && i < expectation.Length; i++)
+ {
+ if (reality[i] != expectation[i])
+ {
+ var path = Path.Combine(cachePath, (i + 1).ToString());
+ if (Directory.Exists(path))
+ {
+ var tmpPath = path + "." + DateTime.Now.Ticks + ".del";
+ Directory.Move(path, tmpPath);
+ }
+ }
+ }
+
+ File.WriteAllLines(filename, expectation);
+
+ new TimerX(s =>
+ {
+ var dirs = Directory.GetDirectories(cachePath, "*.del");
+ foreach (var dir in dirs)
+ {
+ XTrace.WriteLine("Delete cache directory {0}", dir);
+ Directory.Delete(dir, true);
+ }
+ }, null, 10000, 10 * 60 * 1000);
+
+ enabled = true;
+ }
+
+ private static String[] GetExpectation()
+ {
+ var assembly = typeof(AppInfomation).Assembly;
+ var name = assembly.GetManifestResourceNames().Single(s => s.EndsWith(".CacheVersion"));
+ using (var stream = assembly.GetManifestResourceStream(name))
+ using (var reader = new StreamReader(stream))
+ {
+ return reader.ReadToEnd().Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
+ }
+ }
+
+ public static void Delete(String project)
+ {
+ var cachePath = UserConfiguration.Current.CachePath.GetFullPath();
+ for (int i = 0; i < accessors.Length; i++)
+ {
+ var path = Path.Combine(cachePath, (i + 1).ToString(), project);
+ if (Directory.Exists(path)) Directory.Delete(path, true);
+ }
+ }
+
+ protected void RemoveFromRunningPool()
+ {
+ lock (locker)
+ {
+ runningList.Remove(this);
+ }
+ }
+
+ protected abstract void Init();
+
+ protected virtual void LoadOrCalculate()
+ {
+ var loaded = enabled && Load();
+ task = loaded
+ ? new Task(() => { })
+ : new Task(() =>
+ {
+ try
+ {
+ Calculate();
+ if (enabled) Save();
+ }
+ catch (Exception ex)
+ {
+ XTrace.Log.Error("GitCacheAccessor {0} exception" + Environment.NewLine + "{1}", this.GetType().FullName, ex);
+ }
+ });
+
+ task.ContinueWith(t =>
+ {
+ Task.Delay(TimeSpan.FromMinutes(1.0)).Wait();
+ RemoveFromRunningPool();
+ });
+
+ if (loaded)
+ {
+ task.Start();
+ }
+ else if (IsAsync)
+ {
+ //Scheduler.Instance.AddJob(new SingleJob(task));
+ Task.Run(() => task.Start());
+ }
+ else
+ {
+ task.Start();
+ }
+ }
+
+ protected abstract bool Load();
+
+ protected abstract void Save();
+
+ protected abstract void Calculate();
+
+ public virtual bool IsAsync { get { return true; } }
+
+ public static bool operator ==(GitCacheAccessor left, GitCacheAccessor right)
+ {
+ return object.ReferenceEquals(left, right)
+ || !object.ReferenceEquals(left, null) && left.Equals(right)
+ || !object.ReferenceEquals(right, null) && right.Equals(left);
+ }
+
+ public static bool operator !=(GitCacheAccessor left, GitCacheAccessor right)
+ {
+ return !object.ReferenceEquals(left, null) && !left.Equals(right)
+ || !object.ReferenceEquals(right, null) && !right.Equals(left);
+ }
+
+ public override bool Equals(object obj)
+ {
+ throw new NotImplementedException("Must override this method");
+ }
+
+ public override int GetHashCode()
+ {
+ throw new NotImplementedException("Must override this method");
+ }
+ }
+
+ public abstract class GitCacheAccessor<TReturn, TAccessor> : GitCacheAccessor
+ where TAccessor : GitCacheAccessor<TReturn, TAccessor>
+ {
+ public static int AccessorId { get; private set; }
+
+ protected readonly String repoId;
+ protected readonly Repository repo;
+ protected readonly String repoPath;
+
+ protected TReturn result;
+ protected bool resultDone;
+ protected String cacheKey;
+
+ public GitCacheReturn<TReturn> Result
+ {
+ get
+ {
+ if (task != null && !IsAsync)
+ task.Wait();
+ return new GitCacheReturn<TReturn> { Value = result, Done = resultDone };
+ }
+ }
+
+ static GitCacheAccessor()
+ {
+ var selfType = typeof(TAccessor);
+ for (int i = 0; i < accessors.Length; i++)
+ {
+ if (accessors[i] == selfType)
+ {
+ AccessorId = i + 1;
+ break;
+ }
+ }
+ if (AccessorId == 0)
+ {
+ AccessorId = selfType.GetHashCode() % 10000000 + 10000000;
+ XTrace.Log.Error("Not found the register of type '{0}', assign id {1} to '{2}'", selfType.FullName, AccessorId, selfType.Name);
+ }
+ }
+
+ public GitCacheAccessor(String repoId, Repository repo)
+ {
+ Contract.Requires(repoId != null);
+ Contract.Requires(repo != null);
+
+ this.repoId = repoId;
+ this.repo = repo;
+ this.repoPath = repo.Info.Path;
+ }
+
+ protected abstract String GetCacheKey();
+
+ protected virtual String GetCacheKey(params object[] keys)
+ {
+ Contract.Requires(keys != null);
+ Contract.Requires(keys.Length > 0);
+ Contract.Requires(keys.All(s => s != null));
+
+ if (cacheKey != null)
+ return cacheKey;
+
+ var key = typeof(TAccessor).Name + String.Concat(keys);
+ cacheKey = key.CalcSha();
+ return cacheKey;
+ }
+
+ protected virtual String GetCacheFile()
+ {
+ return AccessorId + "\\" + repoId + "\\" + GetCacheKey();
+ }
+
+ protected override bool Load()
+ {
+ var filename = Path.Combine(UserConfiguration.Current.CachePath.GetFullPath(), GetCacheFile());
+ if (File.Exists(filename))
+ {
+ try
+ {
+ using (var fs = File.Open(filename, FileMode.Open))
+ {
+ var formatter = new BinaryFormatter();
+ var value = formatter.Deserialize(fs);
+ if (value is TReturn)
+ {
+ result = (TReturn)value;
+ resultDone = true;
+ return true;
+ }
+ }
+ }
+ catch { }
+ }
+ return false;
+ }
+
+ protected override void Save()
+ {
+ if (!resultDone)
+ return;
+
+ var info = new FileInfo(Path.Combine(UserConfiguration.Current.CachePath.GetFullPath(), GetCacheFile()));
+ if (!info.Directory.Exists)
+ info.Directory.Create();
+
+ using (var fs = info.Create())
+ {
+ var formatter = new BinaryFormatter();
+ formatter.Serialize(fs, result);
+ fs.Flush();
+ }
+ }
+
+ public override bool Equals(object obj)
+ {
+ var accessor = obj as TAccessor;
+ return accessor != null && GetCacheKey() == accessor.GetCacheKey();
+ }
+
+ public override int GetHashCode()
+ {
+ return typeof(TAccessor).GetHashCode() ^ GetCacheKey().GetHashCode();
+ }
+ }
+}
diff --git a/GitCandy.Web/Git/Cache/GitCacheReturn.cs b/GitCandy.Web/Git/Cache/GitCacheReturn.cs
new file mode 100644
index 0000000..8ba4b80
--- /dev/null
+++ b/GitCandy.Web/Git/Cache/GitCacheReturn.cs
@@ -0,0 +1,9 @@
+
+namespace GitCandy.Git.Cache
+{
+ public struct GitCacheReturn<T>
+ {
+ public T Value { get; set; }
+ public bool Done { get; set; }
+ }
+}
diff --git a/GitCandy.Web/Git/CommitsAccessor.cs b/GitCandy.Web/Git/CommitsAccessor.cs
new file mode 100644
index 0000000..0d6f131
--- /dev/null
+++ b/GitCandy.Web/Git/CommitsAccessor.cs
@@ -0,0 +1,67 @@
+using System;
+using System.Diagnostics.Contracts;
+using System.Linq;
+using GitCandy.Extensions;
+using GitCandy.Git.Cache;
+using LibGit2Sharp;
+
+namespace GitCandy.Git
+{
+ public class CommitsAccessor : GitCacheAccessor<RevisionSummaryCacheItem[], CommitsAccessor>
+ {
+ private readonly Commit commit;
+ private readonly String path;
+ private readonly int page, pageSize;
+
+ public CommitsAccessor(String repoId, Repository repo, Commit commit, String path, int page, int pageSize)
+ : base(repoId, repo)
+ {
+ Contract.Requires(commit != null);
+ Contract.Requires(path != null);
+ Contract.Requires(page >= 0);
+ Contract.Requires(pageSize > 0);
+
+ this.commit = commit;
+ this.path = path;
+ this.page = page;
+ this.pageSize = pageSize;
+ }
+
+ public override bool IsAsync { get { return false; } }
+
+ protected override String GetCacheKey()
+ {
+ return GetCacheKey(commit.Sha, path, page, pageSize);
+ }
+
+ protected override void Init()
+ {
+ result = new RevisionSummaryCacheItem[0];
+ }
+
+ protected override void Calculate()
+ {
+ using (var repo = new Repository(this.repoPath))
+ {
+ result = repo.Commits
+ .QueryBy(new CommitFilter { IncludeReachableFrom = commit, SortBy = CommitSortStrategies.Topological | CommitSortStrategies.Time })
+ .PathFilter(path)
+ .Skip((page - 1) * pageSize)
+ .Take(pageSize)
+ .Select(s => new RevisionSummaryCacheItem
+ {
+ CommitSha = s.Sha,
+ MessageShort = s.MessageShort.RepetitionIfEmpty(GitService.UnknowString),
+ AuthorName = s.Author.Name,
+ AuthorEmail = s.Author.Email,
+ AuthorWhen = s.Author.When,
+ CommitterName = s.Committer.Name,
+ CommitterEmail = s.Committer.Email,
+ CommitterWhen = s.Committer.When,
+ })
+ .ToArray();
+ }
+ resultDone = true;
+ }
+ }
+}
diff --git a/GitCandy.Web/Git/ContributorsAccessor.cs b/GitCandy.Web/Git/ContributorsAccessor.cs
new file mode 100644
index 0000000..6319f48
--- /dev/null
+++ b/GitCandy.Web/Git/ContributorsAccessor.cs
@@ -0,0 +1,105 @@
+using GitCandy.Git.Cache;
+using GitCandy.Models;
+using LibGit2Sharp;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using System.Linq;
+
+namespace GitCandy.Git
+{
+ public class ContributorsAccessor : GitCacheAccessor<RepositoryStatisticsModel.Statistics, ContributorsAccessor>
+ {
+ private Commit commit;
+ private String key;
+
+ public ContributorsAccessor(String repoId, Repository repo, Commit commit)
+ : base(repoId, repo)
+ {
+ Contract.Requires(commit != null);
+
+ this.commit = commit;
+ this.key = commit.Sha;
+ }
+
+ protected override String GetCacheKey()
+ {
+ return GetCacheKey(key);
+ }
+
+ protected override void Init()
+ {
+ result = new RepositoryStatisticsModel.Statistics
+ {
+ OrderedCommits = new RepositoryStatisticsModel.ContributorCommits[0]
+ };
+ }
+
+ protected override void Calculate()
+ {
+ using (var repo = new Repository(this.repoPath))
+ {
+ var commit = repo.Lookup<Commit>(key);
+ var ancestors = repo.Commits
+ .QueryBy(new CommitFilter { IncludeReachableFrom = commit });
+
+ var dict = new Dictionary<String, int>();
+ var statistics = new RepositoryStatisticsModel.Statistics();
+ foreach (var ancestor in ancestors)
+ {
+ statistics.NumberOfCommits++;
+ var author = ancestor.Author.ToString();
+ if (dict.ContainsKey(author))
+ {
+ dict[author]++;
+ }
+ else
+ {
+ dict.Add(author, 1);
+ statistics.NumberOfContributors++;
+ }
+ }
+ var size = 0L;
+ statistics.NumberOfFiles = FilesInCommit(commit, out size);
+ statistics.SizeOfSource = size;
+
+ var commits = dict
+ .OrderByDescending(s => s.Value)
+ .Select(s => new RepositoryStatisticsModel.ContributorCommits { Author = s.Key, CommitsCount = s.Value })
+ .ToArray();
+
+ statistics.OrderedCommits = commits;
+
+ result = statistics;
+ resultDone = true;
+ }
+ }
+
+ private int FilesInCommit(Commit commit, out long sourceSize)
+ {
+ var count = 0;
+ var stack = new Stack<Tree>();
+ sourceSize = 0;
+
+ var repo = ((IBelongToARepository)commit).Repository;
+
+ stack.Push(commit.Tree);
+ while (stack.Count != 0)
+ {
+ var tree = stack.Pop();
+ foreach (var entry in tree)
+ switch (entry.TargetType)
+ {
+ case TreeEntryTargetType.Blob:
+ count++;
+ sourceSize += repo.ObjectDatabase.RetrieveObjectMetadata(entry.Target.Id).Size;
+ break;
+ case TreeEntryTargetType.Tree:
+ stack.Push((Tree)entry.Target);
+ break;
+ }
+ }
+ return count;
+ }
+ }
+}
diff --git a/GitCandy.Web/Git/GitService.cs b/GitCandy.Web/Git/GitService.cs
new file mode 100644
index 0000000..08d025a
--- /dev/null
+++ b/GitCandy.Web/Git/GitService.cs
@@ -0,0 +1,809 @@
+using System;
+using System.Diagnostics;
+using System.Diagnostics.Contracts;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using GitCandy.Base;
+using GitCandy.Configuration;
+using GitCandy.Extensions;
+using GitCandy.Git.Cache;
+using GitCandy.Models;
+using LibGit2Sharp;
+
+namespace GitCandy.Git
+{
+ public class GitService : IDisposable
+ {
+ public const String UnknowString = "<Unknow>";
+
+ private readonly Repository _repository;
+ private readonly String _repositoryPath;
+ private readonly String _repoId = null;
+ private readonly Lazy<Encoding> _i18n;
+ private bool _disposed;
+
+ public Encoding I18n { get { return _i18n.Value; } }
+ public String Name { get; private set; }
+ public Repository Repository { get { return _repository; } }
+
+ public GitService(String name)
+ {
+ //var info = GetDirectoryInfo(name);
+ var info = UserConfiguration.Current.RepositoryPath.CombinePath(name).GetFullPath().AsDirectory();
+ _repositoryPath = info.FullName;
+ _repoId = Name = info.Name;
+
+ if (!Repository.IsValid(_repositoryPath))
+ {
+ CreateRepository(name);
+ }
+
+ _repository = new Repository(_repositoryPath);
+ _i18n = new Lazy<Encoding>(() =>
+ {
+ var entry = _repository.Config.Get<String>("i18n.commitEncoding");
+ return entry == null
+ ? null
+ : CpToEncoding(entry.Value);
+ });
+ }
+
+ #region Git Smart HTTP Transport
+ public void InfoRefs(String service, Stream inStream, Stream outStream)
+ {
+ Contract.Requires(service == "receive-pack" || service == "upload-pack");
+ RunGitCmd(service, true, inStream, outStream);
+ }
+
+ public void ExecutePack(String service, Stream inStream, Stream outStream)
+ {
+ Contract.Requires(service == "receive-pack" || service == "upload-pack");
+ RunGitCmd(service, false, inStream, outStream);
+ }
+ #endregion
+
+ #region Repository Browser
+ public TreeModel GetTree(String path)
+ {
+ var isEmptyPath = String.IsNullOrEmpty(path);
+ String referenceName;
+ var commit = GetCommitByPath(ref path, out referenceName);
+ if (commit == null)
+ {
+ if (isEmptyPath)
+ {
+ var branch = _repository.Branches["master"]
+ ?? _repository.Branches.FirstOrDefault();
+ return new TreeModel
+ {
+ ReferenceName = branch == null ? "HEAD" : branch.FriendlyName,
+ };
+ }
+ return null;
+ }
+
+ var model = new TreeModel
+ {
+ ReferenceName = referenceName,
+ Path = String.IsNullOrEmpty(path) ? "" : path,
+ Commit = new CommitModel
+ {
+ Sha = commit.Sha,
+ Author = commit.Author,
+ Committer = commit.Committer,
+ CommitMessageShort = commit.MessageShort.RepetitionIfEmpty(UnknowString),
+ Parents = commit.Parents.Select(s => s.Sha).ToArray()
+ },
+ };
+
+ var tree = String.IsNullOrEmpty(path)
+ ? commit.Tree
+ : commit[path] == null
+ ? null
+ : commit[path].Target as Tree;
+ if (tree == null)
+ return null;
+
+ var summaryAccessor = GitCacheAccessor.Singleton(new SummaryAccessor(_repoId, _repository, commit, tree));
+ var items = summaryAccessor.Result.Value;
+ var entries = (from entry in tree
+ join item in items on entry.Name equals item.Name into g
+ from item in g
+ select new TreeEntryModel
+ {
+ Name = entry.Name,
+ Path = entry.Path.Replace('\\', '/'),
+ Commit = new CommitModel
+ {
+ Sha = item.CommitSha,
+ CommitMessageShort = item.MessageShort,
+ Author = CreateSafeSignature(item.AuthorName, item.AuthorEmail, item.AuthorWhen),
+ Committer = CreateSafeSignature(item.CommitterName, item.CommitterEmail, item.CommitterWhen),
+ },
+ Sha = item.CommitSha,
+ EntryType = entry.TargetType,
+ })
+ .OrderBy(s => s.EntryType == TreeEntryTargetType.Blob)
+ .ThenBy(s => s.Name, new StringLogicalComparer())
+ .ToList();
+
+ model.Entries = entries;
+ model.Readme = entries.FirstOrDefault(s => s.EntryType == TreeEntryTargetType.Blob
+ && (String.Equals(s.Name, "readme", StringComparison.OrdinalIgnoreCase)
+ //|| String.Equals(s.Name, "readme.txt", StringComparison.OrdinalIgnoreCase)
+ || String.Equals(s.Name, "readme.md", StringComparison.OrdinalIgnoreCase)));
+
+ if (model.Readme != null)
+ {
+ var data = ((Blob)tree[model.Readme.Name].Target).GetContentStream().ToBytes();
+ var encoding = FileHelper.DetectEncoding(data, CpToEncoding(commit.Encoding), _i18n.Value);
+ if (encoding == null)
+ {
+ model.Readme.BlobType = BlobType.Binary;
+ }
+ else
+ {
+ model.Readme.BlobType = model.Readme.Name.EndsWith(".md", StringComparison.OrdinalIgnoreCase)
+ ? BlobType.MarkDown
+ : BlobType.Text;
+ model.Readme.TextContent = FileHelper.ReadToEnd(data, encoding);
+ model.Readme.TextBrush = "no-highlight";
+ }
+ }
+
+ model.BranchSelector = GetBranchSelectorModel(referenceName, commit.Sha, path);
+ model.PathBar = new PathBarModel
+ {
+ Name = Name,
+ Action = "Tree",
+ Path = path,
+ ReferenceName = referenceName,
+ ReferenceSha = commit.Sha,
+ HideLastSlash = false,
+ };
+
+ if (model.IsRoot)
+ {
+ var scopeAccessor = GitCacheAccessor.Singleton(new ScopeAccessor(_repoId, _repository, commit));
+ model.Scope = scopeAccessor.Result.Value;
+ }
+
+ return model;
+ }
+
+ public TreeEntryModel GetBlob(String path)
+ {
+ String referenceName;
+ var commit = GetCommitByPath(ref path, out referenceName);
+ if (commit == null)
+ return null;
+
+ var entry = commit[path];
+ if (entry == null || entry.TargetType != TreeEntryTargetType.Blob)
+ return null;
+
+ var blob = (Blob)entry.Target;
+
+ var cacheAccessor = GitCacheAccessor.Singleton(new LastCommitAccessor(_repoId, _repository, commit, path));
+ var lastCommitSha = cacheAccessor.Result.Value;
+ if (lastCommitSha != commit.Sha)
+ commit = _repository.Lookup<Commit>(lastCommitSha);
+
+ var data = blob.GetContentStream().ToBytes();
+ var encoding = FileHelper.DetectEncoding(data, CpToEncoding(commit.Encoding), _i18n.Value);
+ var extension = Path.GetExtension(entry.Name).ToLower();
+ var model = new TreeEntryModel
+ {
+ Name = entry.Name,
+ ReferenceName = referenceName,
+ Sha = commit.Sha,
+ Path = String.IsNullOrEmpty(path) ? "" : path,
+ Commit = new CommitModel
+ {
+ Sha = commit.Sha,
+ Author = commit.Author,
+ Committer = commit.Committer,
+ CommitMessage = commit.Message.RepetitionIfEmpty(UnknowString),
+ CommitMessageShort = commit.MessageShort.RepetitionIfEmpty(UnknowString),
+ Parents = commit.Parents.Select(s => s.Sha).ToArray()
+ },
+ EntryType = entry.TargetType,
+ RawData = data,
+ SizeString = FileHelper.GetSizeString(data.Length),
+ TextContent = encoding == null
+ ? null
+ : FileHelper.ReadToEnd(data, encoding),
+ TextBrush = FileHelper.BrushMapping.ContainsKey(extension)
+ ? FileHelper.BrushMapping[extension]
+ : "no-highlight",
+ BlobType = encoding == null
+ ? FileHelper.ImageSet.Contains(extension)
+ ? BlobType.Image
+ : BlobType.Binary
+ : extension == ".md"
+ ? BlobType.MarkDown
+ : BlobType.Text,
+ BlobEncoding = encoding,
+ BranchSelector = GetBranchSelectorModel(referenceName, commit.Sha, path),
+ PathBar = new PathBarModel
+ {
+ Name = Name,
+ Action = "Tree",
+ Path = path,
+ ReferenceName = referenceName,
+ ReferenceSha = commit.Sha,
+ HideLastSlash = true,
+ },
+ };
+
+ return model;
+ }
+
+ public CommitModel GetCommit(String path)
+ {
+ String referenceName;
+ var commit = GetCommitByPath(ref path, out referenceName);
+ if (commit == null)
+ return null;
+
+ var treeEntry = commit[path];
+ var isBlob = treeEntry != null && treeEntry.TargetType == TreeEntryTargetType.Blob;
+ var model = ToCommitModel(commit, referenceName, !isBlob, path);
+ model.PathBar = new PathBarModel
+ {
+ Name = Name,
+ Action = "Commit",
+ Path = path,
+ ReferenceName = referenceName,
+ ReferenceSha = commit.Sha,
+ HideLastSlash = isBlob,
+ };
+ return model;
+ }
+
+ public CompareModel GetCompare(String start, String end)
+ {
+ String name1, name2;
+ var commit1 = GetCommitByPath(ref start, out name1);
+ var commit2 = GetCommitByPath(ref end, out name2);
+ if (commit1 == null)
+ {
+ commit1 = _repository.Head.Tip;
+ name1 = _repository.Head.FriendlyName;
+ }
+ if (commit2 == null)
+ {
+ commit2 = _repository.Head.Tip;
+ name2 = _repository.Head.FriendlyName;
+ }
+
+ var walks = _repository.Commits
+ .QueryBy(new CommitFilter
+ {
+ IncludeReachableFrom = commit2,
+ ExcludeReachableFrom = commit1,
+ SortBy = CommitSortStrategies.Time
+ })
+ .Select(s => new CommitModel
+ {
+ Sha = s.Sha,
+ Committer = s.Committer,
+ CommitMessageShort = s.MessageShort.RepetitionIfEmpty(UnknowString),
+ })
+ .ToArray();
+
+ var fromBranchSelector = GetBranchSelectorModel(name1, commit1.Sha, null);
+ var toBranchSelector = GetBranchSelectorModel(name2, commit2.Sha, null);
+ var model = new CompareModel
+ {
+ BaseBranchSelector = fromBranchSelector,
+ CompareBranchSelector = toBranchSelector,
+ CompareResult = ToCommitModel(commit1, name1, true, "", commit2.Tree),
+ Walks = walks,
+ };
+ return model;
+ }
+
+ public CommitsModel GetCommits(String path, int page = 1, int pagesize = 20)
+ {
+ String referenceName;
+ var commit = GetCommitByPath(ref path, out referenceName);
+ if (commit == null)
+ return null;
+
+ var commitsAccessor = GitCacheAccessor.Singleton(new CommitsAccessor(_repoId, _repository, commit, path, page, pagesize));
+ var scopeAccessor = GitCacheAccessor.Singleton(new ScopeAccessor(_repoId, _repository, commit, path));
+
+ var model = new CommitsModel
+ {
+ ReferenceName = referenceName,
+ Sha = commit.Sha,
+ Commits = commitsAccessor.Result.Value
+ .Select(s => new CommitModel
+ {
+ CommitMessageShort = s.MessageShort,
+ Sha = s.CommitSha,
+ Author = CreateSafeSignature(s.AuthorName, s.AuthorEmail, s.AuthorWhen),
+ Committer = CreateSafeSignature(s.CommitterName, s.CommitterEmail, s.CommitterWhen),
+ })
+ .ToList(),
+ CurrentPage = page,
+ ItemCount = scopeAccessor.Result.Value.Commits,
+ Path = String.IsNullOrEmpty(path) ? "" : path,
+ PathBar = new PathBarModel
+ {
+ Name = Name,
+ Action = "Commits",
+ Path = path,
+ ReferenceName = referenceName,
+ ReferenceSha = commit.Sha,
+ HideLastSlash = true, // I want a improvement here
+ },
+ };
+
+ return model;
+ }
+
+ public BlameModel GetBlame(String path)
+ {
+ String referenceName;
+ var commit = GetCommitByPath(ref path, out referenceName);
+ if (commit == null)
+ return null;
+
+ var entry = commit[path];
+ if (entry == null || entry.TargetType != TreeEntryTargetType.Blob)
+ return null;
+
+ var blob = (Blob)entry.Target;
+
+ var accessor = GitCacheAccessor.Singleton(new BlameAccessor(_repoId, _repository, commit, path, CpToEncoding(commit.Encoding), _i18n.Value));
+ var hunks = accessor.Result.Value;
+
+ var model = new BlameModel
+ {
+ ReferenceName = referenceName,
+ Sha = commit.Sha,
+ Path = String.IsNullOrEmpty(path) ? "" : path,
+ SizeString = FileHelper.GetSizeString(blob.Size),
+ Brush = FileHelper.GetBrush(path),
+ Hunks = hunks,
+ BranchSelector = GetBranchSelectorModel(referenceName, commit.Sha, path),
+ PathBar = new PathBarModel
+ {
+ Name = Name,
+ Action = "Tree",
+ Path = path,
+ ReferenceName = referenceName,
+ ReferenceSha = commit.Sha,
+ HideLastSlash = true,
+ },
+ };
+
+ return model;
+ }
+
+ public String GetArchiveFilename(String path, String newline, out String referenceName)
+ {
+ var commit = GetCommitByPath(ref path, out referenceName);
+ if (commit == null) return null;
+
+ if (referenceName == null) referenceName = commit.Sha;
+
+ var accessor = GitCacheAccessor.Singleton(new ArchiverAccessor(_repoId, _repository, commit, newline, CpToEncoding(commit.Encoding), _i18n.Value));
+
+ return accessor.Result.Value;
+ }
+
+ public TagsModel GetTags()
+ {
+ var model = new TagsModel
+ {
+ Tags = (from tag in _repository.Tags
+ let commit = (tag.IsAnnotated ? tag.Annotation.Target : tag.Target) as Commit
+ where commit != null
+ select new TagModel
+ {
+ ReferenceName = tag.FriendlyName,
+ Sha = tag.Target.Sha,
+ When = ((Commit)tag.Target).Author.When,
+ MessageShort = ((Commit)tag.Target).MessageShort.RepetitionIfEmpty(UnknowString),
+ })
+ .OrderByDescending(s => s.When)
+ .ToArray()
+ };
+ return model;
+ }
+
+ public BranchesModel GetBranches()
+ {
+ var head = _repository.Head;
+ if (head.Tip == null)
+ return new BranchesModel();
+
+ var key = CalcBranchesKey();
+ var accessor = GitCacheAccessor.Singleton(new HistoryDivergenceAccessor(_repoId, _repository, key));
+ var aheadBehinds = accessor.Result.Value;
+ var model = new BranchesModel
+ {
+ Commit = ToCommitModel(head.Tip, head.FriendlyName),
+ AheadBehinds = aheadBehinds.Select(s => new AheadBehindModel
+ {
+ Ahead = s.Ahead,
+ Behind = s.Behind,
+ Commit = new CommitModel
+ {
+ ReferenceName = s.Name,
+ Author = CreateSafeSignature(s.AuthorName, s.AuthorEmail, s.AuthorWhen),
+ Committer = CreateSafeSignature(s.CommitterName, s.CommitterEmail, s.CommitterWhen),
+ },
+ }).ToArray(),
+ };
+ return model;
+ }
+
+ public void DeleteBranch(String branch)
+ {
+ _repository.Branches.Remove(branch);
+ }
+
+ public void DeleteTag(String tag)
+ {
+ _repository.Tags.Remove(tag);
+ }
+
+ public ContributorsModel GetContributors(String path)
+ {
+ String referenceName;
+ var commit = GetCommitByPath(ref path, out referenceName);
+ if (commit == null)
+ return null;
+
+ var contributorsAccessor = GitCacheAccessor.Singleton(new ContributorsAccessor(_repoId, _repository, commit));
+ var contributors = contributorsAccessor.Result.Value;
+ contributors.OrderedCommits = contributors.OrderedCommits
+ .Take(UserConfiguration.Current.Contributors)
+ .ToArray();
+ var statistics = new RepositoryStatisticsModel();
+ statistics.Current = contributors;
+ statistics.Current.Branch = referenceName;
+
+ if (_repository.Head.Tip != commit)
+ {
+ contributorsAccessor = GitCacheAccessor.Singleton(new ContributorsAccessor(_repoId, _repository, _repository.Head.Tip));
+ statistics.Default = contributorsAccessor.Result.Value;
+ statistics.Default.Branch = _repository.Head.FriendlyName;
+ }
+
+ var key = CalcBranchesKey(true);
+ var repositorySizeAccessor = GitCacheAccessor.Singleton(new RepositorySizeAccessor(_repoId, _repository, key));
+ statistics.RepositorySize = repositorySizeAccessor.Result.Value;
+
+ var model = new ContributorsModel
+ {
+ RepositoryName = Name,
+ Statistics = statistics,
+ };
+ return model;
+ }
+ #endregion
+
+ #region Repository Settings
+ public String GetHeadBranch()
+ {
+ var head = _repository.Head;
+ if (head == null)
+ return null;
+ return head.FriendlyName;
+ }
+
+ public String[] GetLocalBranches()
+ {
+ return _repository.Branches.Select(s => s.FriendlyName).OrderBy(s => s, new StringLogicalComparer()).ToArray();
+ }
+
+ public bool SetHeadBranch(String name)
+ {
+ var refs = _repository.Refs;
+ var refer = refs["refs/heads/" + (name ?? "master")];
+ if (refer == null)
+ return false;
+ refs.UpdateTarget(refs.Head, refer);
+ return true;
+ }
+ #endregion
+
+ #region Private Methods
+ private BranchSelectorModel GetBranchSelectorModel(String referenceName, String refer, String path)
+ {
+ var model = new BranchSelectorModel
+ {
+ Branches = _repository.Branches.Select(s => s.FriendlyName).OrderBy(s => s, new StringLogicalComparer()).ToList(),
+ Tags = _repository.Tags.Select(s => s.FriendlyName).OrderByDescending(s => s, new StringLogicalComparer()).ToList(),
+ Current = referenceName ?? refer.ToShortSha(),
+ Path = path,
+ };
+ model.CurrentIsBranch = model.Branches.Contains(referenceName) || !model.Tags.Contains(referenceName);
+
+ return model;
+ }
+
+ private Commit GetCommitByPath(ref String path, out String referenceName)
+ {
+ referenceName = null;
+
+ if (String.IsNullOrEmpty(path))
+ {
+ referenceName = _repository.Head.FriendlyName;
+ path = "";
+ return _repository.Head.Tip;
+ }
+
+ path = path + "/";
+ var p = path;
+ var branch = _repository.Branches.FirstOrDefault(s => p.StartsWith(s.FriendlyName + "/"));
+ if (branch != null && branch.Tip != null)
+ {
+ referenceName = branch.FriendlyName;
+ path = path.Substring(referenceName.Length).Trim('/');
+ return branch.Tip;
+ }
+
+ var tag = _repository.Tags.FirstOrDefault(s => p.StartsWith(s.FriendlyName + "/"));
+ if (tag != null && tag.Target is Commit)
+ {
+ referenceName = tag.FriendlyName;
+ path = path.Substring(referenceName.Length).Trim('/');
+ return (Commit)tag.Target;
+ }
+
+ var index = path.IndexOf('/');
+ var commit = _repository.Lookup<Commit>(path.Substring(0, index));
+ path = path.Substring(index + 1).Trim('/');
+ return commit;
+ }
+
+ private CommitModel ToCommitModel(Commit commit, String referenceName, bool isTree = true, String detailFilter = null, Tree compareWith = null)
+ {
+ if (commit == null)
+ return null;
+
+ var model = new CommitModel
+ {
+ ReferenceName = referenceName,
+ Sha = commit.Sha,
+ CommitMessageShort = commit.MessageShort.RepetitionIfEmpty(UnknowString),
+ CommitMessage = commit.Message.RepetitionIfEmpty(UnknowString),
+ Author = commit.Author,
+ Committer = commit.Committer,
+ Parents = commit.Parents.Select(e => e.Sha).ToArray(),
+ };
+ if (detailFilter != null)
+ {
+ if (detailFilter != "" && isTree)
+ detailFilter = detailFilter + "/";
+ var firstTree = compareWith != null
+ ? commit.Tree
+ : commit.Parents.Any()
+ ? commit.Parents.First().Tree
+ : null;
+ if (compareWith == null)
+ compareWith = commit.Tree;
+ var compareOptions = new LibGit2Sharp.CompareOptions
+ {
+ Similarity = SimilarityOptions.Renames,
+ };
+ var paths = detailFilter == ""
+ ? null
+ : new[] { detailFilter };
+ var changes = _repository.Diff.Compare<TreeChanges>(firstTree, compareWith, paths, compareOptions: compareOptions);
+ var patches = _repository.Diff.Compare<Patch>(firstTree, compareWith, paths, compareOptions: compareOptions);
+ model.Changes = (from s in changes
+ where (s.Path.Replace('\\', '/') + '/').StartsWith(detailFilter)
+ orderby s.Path
+ let patch = patches[s.Path]
+ select new CommitChangeModel
+ {
+ //Name = s.Name,
+ OldPath = s.OldPath.Replace('\\', '/'),
+ Path = s.Path.Replace('\\', '/'),
+ ChangeKind = s.Status,
+ LinesAdded = patch.LinesAdded,
+ LinesDeleted = patch.LinesDeleted,
+ Patch = patch.Patch,
+ })
+ .ToArray();
+ }
+
+ return model;
+ }
+
+ private Encoding CpToEncoding(String encoding)
+ {
+ try
+ {
+ if (encoding.StartsWith("cp", StringComparison.OrdinalIgnoreCase))
+ return Encoding.GetEncoding(int.Parse(encoding.Substring(2)));
+
+ return Encoding.GetEncoding(encoding);
+ }
+ catch
+ {
+ return null;
+ }
+ }
+
+ private String CalcBranchesKey(bool includeTags = false)
+ {
+ var sb = new StringBuilder();
+ var head = _repository.Head;
+ sb.Append(":");
+ sb.Append(head.CanonicalName);
+ if (head.Tip != null)
+ sb.Append(head.Tip.Sha);
+ sb.Append(';');
+ foreach (var branch in _repository.Branches.OrderBy(s => s.CanonicalName))
+ {
+ sb.Append(':');
+ sb.Append(branch.CanonicalName);
+ if (branch.Tip != null)
+ sb.Append(branch.Tip.Sha);
+ }
+ if (includeTags)
+ {
+ sb.Append(';');
+ foreach (var tag in _repository.Tags.OrderBy(s => s.CanonicalName))
+ {
+ sb.Append(':');
+ sb.Append(tag.CanonicalName);
+ if (tag.Target != null)
+ sb.Append(tag.Target.Sha);
+ }
+ }
+ return sb.ToString();
+ }
+
+ private Signature CreateSafeSignature(String name, String email, DateTimeOffset when)
+ {
+ return new Signature(name.RepetitionIfEmpty(UnknowString), email, when);
+ }
+ #endregion
+
+ #region Static Methods
+ public static bool CreateRepository(String name)
+ {
+ var path = UserConfiguration.Current.RepositoryPath.GetFullPath().CombinePath(name);
+ try
+ {
+ using (var repo = new Repository(Repository.Init(path, true)))
+ {
+ repo.Config.Set("core.logallrefupdates", true);
+ }
+ return true;
+ }
+ catch
+ {
+ try
+ {
+ Directory.Delete(path, true);
+ }
+ catch { }
+ return false;
+ }
+ }
+
+ public static bool DeleteRepository(String name)
+ {
+ var path = UserConfiguration.Current.RepositoryPath.GetFullPath().CombinePath(name);
+ var temp = path + "." + DateTime.Now.Ticks + ".del";
+
+ var retry = 3;
+ for (; retry > 0; retry--)
+ try
+ {
+ Directory.Move(path, temp);
+ break;
+ }
+ catch
+ {
+ Task.Delay(1000).Wait();
+ }
+
+ for (; retry > 0; retry--)
+ try
+ {
+ var di = new DirectoryInfo(temp);
+
+ foreach (var info in di.GetFileSystemInfos("*", SearchOption.AllDirectories))
+ info.Attributes = FileAttributes.Archive;
+
+ break;
+ }
+ catch
+ {
+ Task.Delay(1000).Wait();
+ }
+
+ for (; retry > 0; retry--)
+ try
+ {
+ Directory.Delete(temp, true);
+ break;
+ }
+ catch
+ {
+ Task.Delay(1000).Wait();
+ }
+
+ return retry > 0;
+ }
+
+ //private static DirectoryInfo GetDirectoryInfo(String project)
+ //{
+ // return new DirectoryInfo(Path.Combine(UserConfiguration.Current.RepositoryPath.GetFullPath(), project));
+ //}
+ #endregion
+
+ #region RunGitCmd
+ // un-safe implementation
+ private void RunGitCmd(String serviceName, bool advertiseRefs, Stream inStream, Stream outStream)
+ {
+ var args = serviceName + " --stateless-rpc";
+ if (advertiseRefs)
+ args += " --advertise-refs";
+ args += " \"" + _repositoryPath + "\"";
+
+ var cfg = UserConfiguration.Current;
+ var info = new ProcessStartInfo(Path.Combine(cfg.GitCorePath.GetFullPath(), "git.exe"), args)
+ {
+ CreateNoWindow = true,
+ RedirectStandardError = true,
+ RedirectStandardInput = true,
+ RedirectStandardOutput = true,
+ UseShellExecute = false,
+ WorkingDirectory = Path.GetDirectoryName(cfg.RepositoryPath.GetFullPath()),
+ };
+
+ using (var process = Process.Start(info))
+ {
+ inStream.CopyTo(process.StandardInput.BaseStream);
+ process.StandardInput.Close();
+ process.StandardOutput.BaseStream.CopyTo(outStream);
+
+ process.WaitForExit();
+ }
+ }
+ #endregion
+
+ #region IDisposable Members
+ public void Dispose()
+ {
+ Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+
+ protected virtual void Dispose(bool disposing)
+ {
+ if (!_disposed)
+ {
+ if (disposing)
+ {
+ if (_repository != null)
+ {
+ _repository.Dispose();
+ }
+ }
+
+ _disposed = true;
+ }
+ }
+
+ ~GitService()
+ {
+ Dispose(false);
+ }
+ #endregion
+ }
+}
diff --git a/GitCandy.Web/Git/GitSshService.cs b/GitCandy.Web/Git/GitSshService.cs
new file mode 100644
index 0000000..d45fb3f
--- /dev/null
+++ b/GitCandy.Web/Git/GitSshService.cs
@@ -0,0 +1,135 @@
+using System;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Text.RegularExpressions;
+using System.Threading.Tasks;
+using GitCandy.Configuration;
+using GitCandy.Data;
+using GitCandy.Ssh;
+using GitCandy.Ssh.Services;
+
+namespace GitCandy.Git
+{
+ public class GitSshService
+ {
+ private readonly static Regex RegexParseCommand =
+ new Regex(@"(?<cmd>git-receive-pack|git-upload-pack|git-upload-archive) \'/?git/(?<proj>.+)\.git\'", RegexOptions.Compiled);
+ private readonly Session _session = null;
+ private SessionChannel _channel = null;
+ private Process _process = null;
+ private MembershipService _membershipService = new MembershipService();
+ private RepositoryService _repositoryService = new RepositoryService();
+
+ public GitSshService(Session session)
+ {
+ _session = session;
+
+ session.ServiceRegistered += ServiceRegistered;
+ }
+
+ private void ServiceRegistered(object sender, SshService e)
+ {
+ if (e is UserauthService)
+ {
+ var service = (UserauthService)e;
+ service.Userauth += Userauth;
+ }
+ else if (e is ConnectionService)
+ {
+ var service = (ConnectionService)e;
+ service.CommandOpened += CommandOpened;
+ }
+ }
+
+ private void Userauth(object sender, UserauthArgs e)
+ {
+ e.Result = _membershipService.HasSshKey(e.Fingerprint);
+ }
+
+ private void CommandOpened(object sender, SessionRequestedArgs e)
+ {
+ var match = RegexParseCommand.Match(e.CommandText);
+ var command = match.Groups["cmd"].Value;
+ var project = match.Groups["proj"].Value;
+
+ if (String.IsNullOrWhiteSpace(command) || String.IsNullOrWhiteSpace(project))
+ throw new SshConnectionException("Unexpected command.", DisconnectReason.ByApplication);
+
+ var requireWrite = command == "git-receive-pack";
+ var fingerprint = e.AttachedUserauthArgs.Fingerprint;
+ var key = Convert.ToBase64String(e.AttachedUserauthArgs.Key);
+ var allow = requireWrite
+ ? _repositoryService.CanWriteRepository(project, fingerprint, key)
+ : _repositoryService.CanReadRepository(project, fingerprint, key);
+
+ if (!allow)
+ throw new SshConnectionException("Access denied.", DisconnectReason.ByApplication);
+
+ e.Channel.DataReceived += DataReceived;
+ e.Channel.EofReceived += EofReceived;
+ e.Channel.CloseReceived += CloseReceived;
+ _channel = e.Channel;
+
+ StartProcess(command, project);
+ }
+
+ private void CloseReceived(object sender, EventArgs e)
+ {
+ EnsureClose();
+ }
+
+ private void EofReceived(object sender, EventArgs e)
+ {
+ _process.StandardInput.BaseStream.Close();
+ }
+
+ private void DataReceived(object sender, byte[] e)
+ {
+ _process.StandardInput.BaseStream.Write(e, 0, e.Length);
+ _process.StandardInput.BaseStream.Flush();
+ }
+
+ private void StartProcess(String command, String project)
+ {
+ var args = Path.Combine(UserConfiguration.Current.RepositoryPath.GetFullPath(), project);
+
+ var info = new ProcessStartInfo(Path.Combine(UserConfiguration.Current.GitCorePath.GetFullPath(), command + ".exe"), args)
+ {
+ CreateNoWindow = true,
+ RedirectStandardError = true,
+ RedirectStandardInput = true,
+ RedirectStandardOutput = true,
+ UseShellExecute = false,
+ };
+ _process = Process.Start(info);
+
+ Task.Run(() => MessageLoop());
+ }
+
+ private void MessageLoop()
+ {
+ var bytes = new byte[1024 * 64];
+ while (true)
+ {
+ var len = _process.StandardOutput.BaseStream.Read(bytes, 0, bytes.Length);
+ if (len <= 0)
+ break;
+
+ var data = bytes.Length != len
+ ? bytes.Take(len).ToArray()
+ : bytes;
+ _channel.SendData(data);
+ }
+ _channel.SendEof();
+ _channel.SendClose((uint)_process.ExitCode);
+ EnsureClose();
+ }
+
+ private void EnsureClose()
+ {
+ if (_channel.ClientClosed && _channel.ServerClosed)
+ _session.Disconnect();
+ }
+ }
+}
diff --git a/GitCandy.Web/Git/HistoryDivergenceAccessor.cs b/GitCandy.Web/Git/HistoryDivergenceAccessor.cs
new file mode 100644
index 0000000..8e9790b
--- /dev/null
+++ b/GitCandy.Web/Git/HistoryDivergenceAccessor.cs
@@ -0,0 +1,71 @@
+using System;
+using System.Diagnostics.Contracts;
+using System.Linq;
+using GitCandy.Git.Cache;
+using LibGit2Sharp;
+
+namespace GitCandy.Git
+{
+ public class HistoryDivergenceAccessor : GitCacheAccessor<RevisionSummaryCacheItem[], HistoryDivergenceAccessor>
+ {
+ private readonly String key;
+
+ public HistoryDivergenceAccessor(String repoId, Repository repo, String key)
+ : base(repoId, repo)
+ {
+ Contract.Requires(key != null);
+
+ this.key = key;
+ }
+
+ protected override String GetCacheKey()
+ {
+ return GetCacheKey(key);
+ }
+
+ protected override void Init()
+ {
+ var head = repo.Head;
+ if (head.Tip == null)
+ return;
+
+ result = repo.Branches
+ .Where(s => s != head && s.FriendlyName != "HEAD")
+ .OrderByDescending(s => s.Tip.Author.When)
+ .Select(branch =>
+ {
+ var commit = branch.Tip;
+ return new RevisionSummaryCacheItem
+ {
+ Ahead = 0,
+ Behind = 0,
+ Name = branch.FriendlyName,
+ CommitSha = commit.Sha,
+ AuthorName = commit.Author.Name,
+ AuthorEmail = commit.Author.Email,
+ AuthorWhen = commit.Author.When,
+ CommitterName = commit.Committer.Name,
+ CommitterEmail = commit.Committer.Email,
+ CommitterWhen = commit.Committer.When,
+ };
+ })
+ .ToArray();
+ }
+
+ protected override void Calculate()
+ {
+ using (var repo = new Repository(this.repoPath))
+ {
+ var head = repo.Head;
+ foreach (var item in result)
+ {
+ var commit = repo.Branches[item.Name].Tip;
+ var divergence = repo.ObjectDatabase.CalculateHistoryDivergence(commit, head.Tip);
+ item.Ahead = divergence.AheadBy ?? 0;
+ item.Behind = divergence.BehindBy ?? 0;
+ }
+ }
+ resultDone = true;
+ }
+ }
+}
diff --git a/GitCandy.Web/Git/LastCommitAccessor.cs b/GitCandy.Web/Git/LastCommitAccessor.cs
new file mode 100644
index 0000000..8dbe297
--- /dev/null
+++ b/GitCandy.Web/Git/LastCommitAccessor.cs
@@ -0,0 +1,77 @@
+using GitCandy.Git.Cache;
+using LibGit2Sharp;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using System;
+
+namespace GitCandy.Git
+{
+ public sealed class LastCommitAccessor : GitCacheAccessor<String, LastCommitAccessor>
+ {
+ private readonly Commit commit;
+ private readonly String path;
+
+ public LastCommitAccessor(String repoId, Repository repo, Commit commit, String path)
+ : base(repoId, repo)
+ {
+ Contract.Requires(commit != null);
+ Contract.Requires(path != null);
+ Contract.Requires(commit[path] != null);
+
+ this.commit = commit;
+ this.path = path;
+
+ var treeEntry = commit[path];
+ }
+
+ protected override String GetCacheKey()
+ {
+ return GetCacheKey(commit.Sha, path);
+ }
+
+ protected override void Init()
+ {
+ result = commit.Sha;
+ }
+
+ protected override void Calculate()
+ {
+ using (var repo = new Repository(this.repoPath))
+ {
+ var commit = repo.Lookup<Commit>(this.commit.Sha);
+ var treeEntry = commit[path];
+ if (treeEntry == null)
+ {
+ resultDone = true;
+ return;
+ }
+
+ var gitObject = treeEntry.Target;
+ var hs = new HashSet<String>();
+ var queue = new Queue<Commit>();
+ queue.Enqueue(commit);
+ hs.Add(commit.Sha);
+ while (queue.Count > 0)
+ {
+ commit = queue.Dequeue();
+ result = commit.Sha;
+ var has = false;
+ foreach (var parent in commit.Parents)
+ {
+ treeEntry = parent[path];
+ if (treeEntry == null)
+ continue;
+ var eq = treeEntry.Target.Sha == gitObject.Sha;
+ if (eq && hs.Add(parent.Sha))
+ queue.Enqueue(parent);
+ has = has || eq;
+ }
+ if (!has)
+ break;
+ }
+ resultDone = true;
+ return;
+ }
+ }
+ }
+}
diff --git a/GitCandy.Web/Git/RepositorySizeAccessor.cs b/GitCandy.Web/Git/RepositorySizeAccessor.cs
new file mode 100644
index 0000000..a1a9eb5
--- /dev/null
+++ b/GitCandy.Web/Git/RepositorySizeAccessor.cs
@@ -0,0 +1,43 @@
+using System;
+using System.Diagnostics.Contracts;
+using System.IO;
+using GitCandy.Git.Cache;
+using LibGit2Sharp;
+
+namespace GitCandy.Git
+{
+ public class RepositorySizeAccessor : GitCacheAccessor<long, RepositorySizeAccessor>
+ {
+ private String key;
+
+ public RepositorySizeAccessor(String repoId, Repository repo, String key)
+ : base(repoId, repo)
+ {
+ Contract.Requires(key != null);
+
+ this.key = key;
+ }
+
+ public override bool IsAsync { get { return false; } }
+
+ protected override String GetCacheKey()
+ {
+ return GetCacheKey(key);
+ }
+
+ protected override void Init()
+ {
+ result = 0;
+ }
+
+ protected override void Calculate()
+ {
+ var info = new DirectoryInfo(this.repoPath);
+ foreach (var file in info.GetFiles("*", SearchOption.AllDirectories))
+ {
+ result += file.Length;
+ }
+ resultDone = true;
+ }
+ }
+}
diff --git a/GitCandy.Web/Git/RevisionSummaryCacheItem.cs b/GitCandy.Web/Git/RevisionSummaryCacheItem.cs
new file mode 100644
index 0000000..2a11ec3
--- /dev/null
+++ b/GitCandy.Web/Git/RevisionSummaryCacheItem.cs
@@ -0,0 +1,22 @@
+using System;
+
+namespace GitCandy.Git
+{
+ [Serializable]
+ public class RevisionSummaryCacheItem
+ {
+ public String Name;
+ public String Path;
+ public String TargetSha;
+ public String CommitSha;
+ public String MessageShort;
+ public String AuthorName;
+ public String AuthorEmail;
+ public DateTimeOffset AuthorWhen;
+ public String CommitterName;
+ public String CommitterEmail;
+ public DateTimeOffset CommitterWhen;
+ public int Ahead;
+ public int Behind;
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Git/ScopeAccessor.cs b/GitCandy.Web/Git/ScopeAccessor.cs
new file mode 100644
index 0000000..c63ad98
--- /dev/null
+++ b/GitCandy.Web/Git/ScopeAccessor.cs
@@ -0,0 +1,63 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics.Contracts;
+using System.Linq;
+using GitCandy.Extensions;
+using GitCandy.Git.Cache;
+using GitCandy.Models;
+using LibGit2Sharp;
+
+namespace GitCandy.Git
+{
+ public class ScopeAccessor : GitCacheAccessor<RepositoryScope, ScopeAccessor>
+ {
+ private readonly Commit commit;
+ private readonly String path;
+ private readonly bool pathExist;
+
+ public ScopeAccessor(String repoId, Repository repo, Commit commit, String path = "")
+ : base(repoId, repo)
+ {
+ Contract.Requires(commit != null);
+
+ this.commit = commit;
+ this.path = path;
+ this.pathExist = commit[path] != null;
+ }
+
+ protected override String GetCacheKey()
+ {
+ return GetCacheKey(commit.Sha, path);
+ }
+
+ protected override void Init()
+ {
+ result = new RepositoryScope
+ {
+ Commits = 0,
+ Contributors = 0,
+ Branches = repo.Branches.Count(),
+ Tags = repo.Tags.Count(),
+ };
+ }
+
+ protected override void Calculate()
+ {
+ using (var repo = new Repository(this.repoPath))
+ {
+ var ancestors = pathExist
+ ? repo.Commits.QueryBy(new CommitFilter { IncludeReachableFrom = commit }).PathFilter(path)
+ : repo.Commits.QueryBy(new CommitFilter { IncludeReachableFrom = commit });
+
+ var set = new HashSet<String>();
+ foreach (var ancestor in ancestors)
+ {
+ result.Commits++;
+ if (set.Add(ancestor.Author.ToString()))
+ result.Contributors++;
+ }
+ }
+ resultDone = true;
+ }
+ }
+}
diff --git a/GitCandy.Web/Git/SummaryAccessor.cs b/GitCandy.Web/Git/SummaryAccessor.cs
new file mode 100644
index 0000000..36c840d
--- /dev/null
+++ b/GitCandy.Web/Git/SummaryAccessor.cs
@@ -0,0 +1,111 @@
+using System;
+using System.Diagnostics.Contracts;
+using System.Linq;
+using GitCandy.Base;
+using GitCandy.Extensions;
+using GitCandy.Git.Cache;
+using LibGit2Sharp;
+
+namespace GitCandy.Git
+{
+ public class SummaryAccessor : GitCacheAccessor<RevisionSummaryCacheItem[], SummaryAccessor>
+ {
+ private readonly Commit commit;
+ private readonly Tree tree;
+
+ public SummaryAccessor(String repoId, Repository repo, Commit commit, Tree tree)
+ : base(repoId, repo)
+ {
+ Contract.Requires(commit != null);
+ Contract.Requires(tree != null);
+
+ this.commit = commit;
+ this.tree = tree;
+ }
+
+ protected override String GetCacheKey()
+ {
+ return GetCacheKey(commit.Id, tree.Id);
+ }
+
+ protected override void Init()
+ {
+ result = tree
+ .OrderBy(s => s.TargetType == TreeEntryTargetType.Blob)
+ .ThenBy(s => s.Name, new StringLogicalComparer())
+ .Select(s => new RevisionSummaryCacheItem
+ {
+ Name = s.Name,
+ Path = s.Path.Replace('\\', '/'),
+ TargetSha = s.Target.Sha,
+ MessageShort = "Loading...",
+ AuthorEmail = "Loading...",
+ AuthorName = "Loading...",
+ CommitterEmail = "Loading...",
+ CommitterName = "Loading...",
+ })
+ .ToArray();
+ }
+
+ protected override void Calculate()
+ {
+ using (var repo = new Repository(this.repoPath))
+ {
+ var ancestors = repo.Commits
+ .QueryBy(new CommitFilter { IncludeReachableFrom = commit, SortBy = CommitSortStrategies.Topological });
+
+ // null, continue search current reference
+ // true, have found, done
+ // false, search has been interrupted, but waiting for next match
+ var status = new bool?[result.Length];
+ var done = result.Length;
+ Commit lastCommit = null;
+ foreach (var ancestor in ancestors)
+ {
+ for (var index = 0; index < result.Length; index++)
+ {
+ if (status[index] == true)
+ continue;
+ var item = result[index];
+ var ancestorEntry = ancestor[item.Path];
+ if (ancestorEntry != null && ancestorEntry.Target.Sha == item.TargetSha)
+ {
+ item.CommitSha = ancestor.Sha;
+ item.MessageShort = ancestor.MessageShort.RepetitionIfEmpty(GitService.UnknowString);
+ item.AuthorEmail = ancestor.Author.Email;
+ item.AuthorName = ancestor.Author.Name;
+ item.AuthorWhen = ancestor.Author.When;
+ item.CommitterEmail = ancestor.Committer.Email;
+ item.CommitterName = ancestor.Committer.Name;
+ item.CommitterWhen = ancestor.Committer.When;
+
+ status[index] = null;
+ }
+ else if (status[index] == null)
+ {
+ var over = true;
+ foreach (var parent in lastCommit.Parents) // Backtracking
+ {
+ if (parent.Sha == ancestor.Sha)
+ continue;
+ var entry = parent[item.Path];
+ if (entry != null && entry.Target.Sha == item.TargetSha)
+ {
+ over = false;
+ break;
+ }
+ }
+ status[index] = over;
+ if (over)
+ done--;
+ }
+ }
+ if (done == 0)
+ break;
+ lastCommit = ancestor;
+ }
+ }
+ resultDone = true;
+ }
+ }
+}
diff --git a/GitCandy.Web/GitCandy.Web.csproj b/GitCandy.Web/GitCandy.Web.csproj
new file mode 100644
index 0000000..a5f327b
--- /dev/null
+++ b/GitCandy.Web/GitCandy.Web.csproj
@@ -0,0 +1,743 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="..\packages\LibGit2Sharp.NativeBinaries.1.0.129\build\LibGit2Sharp.NativeBinaries.props" Condition="Exists('..\packages\LibGit2Sharp.NativeBinaries.1.0.129\build\LibGit2Sharp.NativeBinaries.props')" />
+ <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>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{D1E514B2-2A79-4101-BB0D-FF2139FFD1EC}</ProjectGuid>
+ <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>GitCandy.Web</RootNamespace>
+ <AssemblyName>GitCandy.Web</AssemblyName>
+ <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+ <UseIISExpress>true</UseIISExpress>
+ <IISExpressSSLPort />
+ <IISExpressAnonymousAuthentication />
+ <IISExpressWindowsAuthentication />
+ <IISExpressUseClassicPipelineMode />
+ <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="ICSharpCode.SharpZipLib">
+ <HintPath>..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll</HintPath>
+ </Reference>
+ <Reference Include="LibGit2Sharp, Version=0.22.0.0, Culture=neutral, PublicKeyToken=7cbde695407f0333, processorArchitecture=MSIL">
+ <HintPath>..\packages\LibGit2Sharp.0.22.0\lib\net40\LibGit2Sharp.dll</HintPath>
+ <Private>True</Private>
+ </Reference>
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+ <Private>True</Private>
+ <HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
+ </Reference>
+ <Reference Include="NewLife.Core">
+ <HintPath>..\DLL\NewLife.Core.dll</HintPath>
+ </Reference>
+ <Reference Include="NewLife.Cube">
+ <HintPath>..\DLL\NewLife.Cube.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.Configuration" />
+ <Reference Include="System.ComponentModel.DataAnnotations" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Numerics" />
+ <Reference Include="System.Security" />
+ <Reference Include="System.Transactions" />
+ <Reference Include="System.Web" />
+ <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.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.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" />
+ <Reference Include="XCode">
+ <HintPath>..\DLL\XCode.dll</HintPath>
+ </Reference>
+ </ItemGroup>
+ <ItemGroup>
+ <Content Include="Content\bootstrap-theme.css" />
+ <Content Include="Content\bootstrap-theme.min.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="fonts\glyphicons-halflings-regular.woff2" />
+ <Content Include="fonts\glyphicons-halflings-regular.woff" />
+ <Content Include="fonts\glyphicons-halflings-regular.ttf" />
+ <Content Include="fonts\glyphicons-halflings-regular.eot" />
+ <Content Include="Content\bootstrap.min.css.map" />
+ <Content Include="Content\bootstrap.css.map" />
+ <Content Include="Content\bootstrap-theme.min.css.map" />
+ <Content Include="Content\bootstrap-theme.css.map" />
+ <Content Include="Areas\GitCandy\Views\web.config" />
+ <None Include="packages.config">
+ <SubType>
+ </SubType>
+ </None>
+ <None Include="Properties\PublishProfiles\GitCandy.pubxml" />
+ <None Include="Scripts\jquery-2.0.3.intellisense.js" />
+ <None Include="Scripts\_references.js" />
+ <Content Include="Views\Shared\DisplayTemplates\Maps.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Maps.generated.cs</LastGenOutput>
+ </Content>
+ <None Include="Web.Debug.config">
+ <DependentUpon>Web.config</DependentUpon>
+ </None>
+ <None Include="Web.Release.config">
+ <DependentUpon>Web.config</DependentUpon>
+ </None>
+ </ItemGroup>
+ <ItemGroup>
+ <Content Include="Content\bootstrap-switch.css" />
+ <Content Include="Content\highlight.css" />
+ <Content Include="Content\Site.css" />
+ <Content Include="Global.asax" />
+ <Content Include="Scripts\bootstrap.js" />
+ <Content Include="Scripts\bootstrap.min.js" />
+ <Content Include="Scripts\bootstrap3-typeahead.js" />
+ <Content Include="Scripts\bootstrap-switch.js" />
+ <Content Include="Scripts\common.js" />
+ <Content Include="Scripts\highlight.pack.js" />
+ <Content Include="Scripts\jquery-2.0.3.js" />
+ <Content Include="Scripts\marked.js" />
+ <Content Include="Views\Account\Change.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Change.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Account\Create.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Create.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Account\Delete.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Delete.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Account\Detail.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Detail.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Account\Edit.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Edit.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Account\Forgot.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Forgot.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Account\Index.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Index.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Account\Login.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Login.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Account\Ssh.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Ssh.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Home\About.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>About.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\Blame.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Blame.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\Blob.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Blob.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\Branches.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Branches.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\Commit.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Commit.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\Commits.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Commits.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\Compare.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Compare.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\Contributors.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Contributors.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\Coop.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Coop.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\Create.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Create.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\Delete.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Delete.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\Detail.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Detail.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\Edit.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Edit.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\Index.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Index.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\Tags.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Tags.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\Tree.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Tree.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\_BlobPreview.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>_BlobPreview.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\_BranchSelector.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>_BranchSelector.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\_Diff.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>_Diff.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\_GitUrlButton.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>_GitUrlButton.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\_PathBar.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>_PathBar.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Repository\_ZipButton.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>_ZipButton.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Setting\Edit.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Edit.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Setting\ReGenSsh.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>ReGenSsh.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Setting\Restart.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Restart.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Shared\DisplayTemplates\Members.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Members.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Shared\DisplayTemplates\YesNo.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>YesNo.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Shared\Error.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Error.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Shared\_Layout.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>_Layout.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Shared\_Pager.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>_Pager.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Team\Create.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Create.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Team\Delete.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Delete.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Team\Detail.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Detail.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Team\Edit.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Edit.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Team\Index.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Index.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Team\Users.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>Users.generated.cs</LastGenOutput>
+ </Content>
+ <Content Include="Views\Web.config" />
+ <Content Include="Views\_ViewStart.cshtml">
+ <Generator>RazorGenerator</Generator>
+ <LastGenOutput>_ViewStart.generated.cs</LastGenOutput>
+ </Content>
+ <None Include="Web.config" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="App_GlobalResources\SR.designer.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>SR.resx</DependentUpon>
+ </Compile>
+ <Compile Include="App_GlobalResources\SR.fr.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>SR.fr.resx</DependentUpon>
+ </Compile>
+ <Compile Include="App_GlobalResources\SR.zh-Hans.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>SR.zh-Hans.resx</DependentUpon>
+ </Compile>
+ <Compile Include="App_Start\AppInfomation.cs" />
+ <Compile Include="App_Start\FilterConfig.cs" />
+ <Compile Include="App_Start\RouteConfig.cs" />
+ <Compile Include="App_Start\SshServerConfig.cs" />
+ <Compile Include="Areas\GitCandy\Controllers\RepositoryController.cs" />
+ <Compile Include="Areas\GitCandy\Controllers\AuthorizationLogController.cs" />
+ <Compile Include="Areas\GitCandy\Controllers\SshKeyController.cs" />
+ <Compile Include="Areas\GitCandy\Controllers\UserController.cs" />
+ <Compile Include="Areas\GitCandy\Controllers\UserRepositoryController.cs" />
+ <Compile Include="Areas\GitCandy\Controllers\UserTeamController.cs" />
+ <Compile Include="Areas\GitCandy\Controllers\GitController.cs" />
+ <Compile Include="Areas\GitCandy\GitCandyAreaRegistration.cs" />
+ <Compile Include="Base\RawResult.cs" />
+ <Compile Include="Controllers\AccountController.cs" />
+ <Compile Include="Controllers\CandyControllerBase.cs" />
+ <Compile Include="Controllers\GitController.cs" />
+ <Compile Include="Controllers\HomeController.cs" />
+ <Compile Include="Controllers\RepositoryController.cs" />
+ <Compile Include="Controllers\SettingController.cs" />
+ <Compile Include="Controllers\TeamController.cs" />
+ <Compile Include="Data\MembershipService.cs" />
+ <Compile Include="Data\RepositoryService.cs" />
+ <Compile Include="Extensions\CommitLogExtension.cs" />
+ <Compile Include="Extensions\HtmlHelperExtension.cs" />
+ <Compile Include="Extensions\MetadataExtension.cs" />
+ <Compile Include="Filters\AdministratorAttribute.cs" />
+ <Compile Include="Filters\AllowRegisterUserAttribute.cs" />
+ <Compile Include="Filters\AllowRepositoryCreationAttribute.cs" />
+ <Compile Include="Filters\CurrentUserOrAdministratorAttribute.cs" />
+ <Compile Include="Filters\PublicServerAttribute.cs" />
+ <Compile Include="Filters\ReadRepositoryAttribute.cs" />
+ <Compile Include="Filters\RepositoryOwnerOrSystemAdministratorAttribute.cs" />
+ <Compile Include="Filters\SmartAuthorizeAttribute.cs" />
+ <Compile Include="Filters\SmartGitAttribute.cs" />
+ <Compile Include="Filters\TeamOrSystemAdministratorAttribute.cs" />
+ <Compile Include="Git\ArchiverAccessor.cs" />
+ <Compile Include="Git\BlameAccessor.cs" />
+ <Compile Include="Git\Cache\GitCacheAccessor.cs" />
+ <Compile Include="Git\Cache\GitCacheReturn.cs" />
+ <Compile Include="Git\CommitsAccessor.cs" />
+ <Compile Include="Git\ContributorsAccessor.cs" />
+ <Compile Include="Git\GitService.cs" />
+ <Compile Include="Git\GitSshService.cs" />
+ <Compile Include="Git\HistoryDivergenceAccessor.cs" />
+ <Compile Include="Git\LastCommitAccessor.cs" />
+ <Compile Include="Git\RepositorySizeAccessor.cs" />
+ <Compile Include="Git\RevisionSummaryCacheItem.cs" />
+ <Compile Include="Git\ScopeAccessor.cs" />
+ <Compile Include="Git\SummaryAccessor.cs" />
+ <Compile Include="Global.asax.cs">
+ <DependentUpon>Global.asax</DependentUpon>
+ </Compile>
+ <Compile Include="Models\AheadBehindModel.cs" />
+ <Compile Include="Models\BlameHunkModel.cs" />
+ <Compile Include="Models\BlameModel.cs" />
+ <Compile Include="Models\BlobType.cs" />
+ <Compile Include="Models\BranchesModel.cs" />
+ <Compile Include="Models\BranchSelectorModel.cs" />
+ <Compile Include="Models\ChangePasswordModel.cs" />
+ <Compile Include="Models\CollaborationModel.cs" />
+ <Compile Include="Models\CommitChangeModel.cs" />
+ <Compile Include="Models\CommitModel.cs" />
+ <Compile Include="Models\CommitsModel.cs" />
+ <Compile Include="Models\CompareModel.cs" />
+ <Compile Include="Models\ContributorsModel.cs" />
+ <Compile Include="Models\GitUrl.cs" />
+ <Compile Include="Models\LoginModel.cs" />
+ <Compile Include="Models\PathBarModel.cs" />
+ <Compile Include="Models\RepositoryListModel.cs" />
+ <Compile Include="Models\RepositoryModel.cs" />
+ <Compile Include="Models\RepositoryModelBase.cs" />
+ <Compile Include="Models\RepositoryScope.cs" />
+ <Compile Include="Models\RepositoryStatisticsModel.cs" />
+ <Compile Include="Models\SettingModel.cs" />
+ <Compile Include="Models\SshModel.cs" />
+ <Compile Include="Models\TagModel.cs" />
+ <Compile Include="Models\TagsModel.cs" />
+ <Compile Include="Models\TeamListModel.cs" />
+ <Compile Include="Models\TeamModel.cs" />
+ <Compile Include="Models\TreeEntryModel.cs" />
+ <Compile Include="Models\TreeModel.cs" />
+ <Compile Include="Models\UserListModel.cs" />
+ <Compile Include="Models\UserModel.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="Views\Account\Change.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Change.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Account\Create.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Create.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Account\Delete.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Delete.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Account\Detail.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Detail.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Account\Edit.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Edit.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Account\Forgot.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Forgot.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Account\Index.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Index.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Account\Login.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Login.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Account\Ssh.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Ssh.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Home\About.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>About.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\Blame.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Blame.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\Blob.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Blob.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\Branches.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Branches.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\Commit.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Commit.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\Commits.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Commits.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\Compare.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Compare.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\Contributors.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Contributors.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\Coop.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Coop.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\Create.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Create.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\Delete.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Delete.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\Detail.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Detail.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\Edit.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Edit.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\Index.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Index.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\Tags.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Tags.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\Tree.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Tree.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\_BlobPreview.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>_BlobPreview.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\_BranchSelector.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>_BranchSelector.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\_Diff.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>_Diff.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\_GitUrlButton.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>_GitUrlButton.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\_PathBar.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>_PathBar.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Repository\_ZipButton.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>_ZipButton.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Setting\Edit.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Edit.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Setting\ReGenSsh.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>ReGenSsh.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Setting\Restart.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Restart.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Shared\DisplayTemplates\Maps.generated.cs">
+ <DependentUpon>Maps.cshtml</DependentUpon>
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ </Compile>
+ <Compile Include="Views\Shared\DisplayTemplates\Members.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Members.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Shared\DisplayTemplates\YesNo.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>YesNo.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Shared\Error.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Error.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Shared\_Layout.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>_Layout.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Shared\_Pager.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>_Pager.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Team\Create.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Create.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Team\Delete.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Delete.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Team\Detail.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Detail.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Team\Edit.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Edit.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Team\Index.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Index.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\Team\Users.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Users.cshtml</DependentUpon>
+ </Compile>
+ <Compile Include="Views\_ViewStart.generated.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>_ViewStart.cshtml</DependentUpon>
+ </Compile>
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="App_GlobalResources\SR.resx">
+ <Generator>PublicResXFileCodeGenerator</Generator>
+ <LastGenOutput>SR.designer.cs</LastGenOutput>
+ <SubType>Designer</SubType>
+ </EmbeddedResource>
+ <EmbeddedResource Include="App_GlobalResources\SR.fr.resx">
+ <Generator>ResXFileCodeGenerator</Generator>
+ <LastGenOutput>SR.fr.Designer.cs</LastGenOutput>
+ <SubType>Designer</SubType>
+ </EmbeddedResource>
+ <EmbeddedResource Include="App_GlobalResources\SR.zh-Hans.resx">
+ <Generator>PublicResXFileCodeGenerator</Generator>
+ <LastGenOutput>SR.zh-Hans.Designer.cs</LastGenOutput>
+ <SubType>Designer</SubType>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Properties\Information" />
+ <EmbeddedResource Include="Properties\CacheVersion" />
+ </ItemGroup>
+ <ItemGroup>
+ <Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" />
+ </ItemGroup>
+ <ItemGroup>
+ <Folder Include="Areas\GitCandy\Models\" />
+ <Folder Include="Areas\GitCandy\Views\Shared\" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\GitCandy\GitCandy.csproj">
+ <Project>{8c65d667-ba60-4810-927a-f8afb55d55fe}</Project>
+ <Name>GitCandy</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>
+ <PropertyGroup>
+ <PreBuildEvent>
+ </PreBuildEvent>
+ </PropertyGroup>
+ <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+ <PropertyGroup>
+ <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>
+ </PropertyGroup>
+ <Error Condition="!Exists('..\packages\LibGit2Sharp.NativeBinaries.1.0.129\build\LibGit2Sharp.NativeBinaries.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\LibGit2Sharp.NativeBinaries.1.0.129\build\LibGit2Sharp.NativeBinaries.props'))" />
+ </Target>
+ <ProjectExtensions>
+ <VisualStudio>
+ <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
+ <WebProjectProperties>
+ <UseIIS>True</UseIIS>
+ <AutoAssignPort>True</AutoAssignPort>
+ <DevelopmentServerPort>0</DevelopmentServerPort>
+ <DevelopmentServerVPath>/</DevelopmentServerVPath>
+ <IISUrl>http://localhost:1796/</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>
\ No newline at end of file
diff --git a/GitCandy.Web/Global.asax b/GitCandy.Web/Global.asax
new file mode 100644
index 0000000..0a1bf8d
--- /dev/null
+++ b/GitCandy.Web/Global.asax
@@ -0,0 +1 @@
+<%@ Application Codebehind="Global.asax.cs" Inherits="GitCandy.GitCandyApplication" Language="C#" %>
diff --git a/GitCandy.Web/Global.asax.cs b/GitCandy.Web/Global.asax.cs
new file mode 100644
index 0000000..37bf83b
--- /dev/null
+++ b/GitCandy.Web/Global.asax.cs
@@ -0,0 +1,148 @@
+using System;
+using System.Globalization;
+using System.Threading;
+using System.Web;
+using System.Web.Mvc;
+using System.Web.Routing;
+using GitCandy.Base;
+using GitCandy.Git.Cache;
+using NewLife.Log;
+
+namespace GitCandy
+{
+ public class GitCandyApplication : System.Web.HttpApplication
+ {
+ public bool HidingRequestResponse { get; private set; }
+
+ protected void Application_Start()
+ {
+ HidingRequestResponse = HttpRuntime.UsingIntegratedPipeline;
+
+ //Logger.SetLogPath();
+ //XTrace.WriteLine(AppInfomation.GetAppStartingInfo());
+ XTrace.WriteVersion(this.GetType().Assembly);
+
+ AreaRegistration.RegisterAllAreas();
+
+ FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
+ RouteConfig.RegisterRoutes(RouteTable.Routes);
+ //BundleConfig.RegisterBundles(BundleTable.Bundles);
+
+ //MefConfig.RegisterMef();
+ //ScheduleConfig.RegisterScheduler();
+
+ GitCacheAccessor.Initialize();
+ SshServerConfig.StartSshServer();
+
+ //XTrace.WriteLine(AppInfomation.GetAppStartedInfo());
+
+ HidingRequestResponse = false;
+ }
+
+ //protected void Application_End()
+ //{
+ // SshServerConfig.StopSshServer();
+ // ScheduleConfig.StopAndWait();
+ // //XTrace.WriteLine(AppInfomation.GetAppEndInfo());
+
+ // Process.GetCurrentProcess().Kill();
+ //}
+
+ //protected void Application_Error()
+ //{
+ // var context = this.Context;
+ // var server = context.Server;
+ // var ex = server.GetLastError();
+ // var statusCode = new HttpException(null, ex).GetHttpCode();
+
+ // var sb = new StringBuilder();
+ // if (HidingRequestResponse)
+ // sb.AppendLine(statusCode + ", Unknow, First request on integrated mode");
+ // else
+ // sb.AppendLine(statusCode + ", " + context.Request.HttpMethod + ", " + context.Request.Url.ToString());
+ // if (statusCode == 500)
+ // {
+ // sb.AppendLine(ex.ToString());
+ // XTrace.Log.Error(sb.ToString());
+ // }
+ // else
+ // {
+ // XTrace.Log.Warn(sb.ToString());
+ // }
+
+ // if (!HidingRequestResponse && UserConfiguration.Current.LocalSkipCustomError && context.Request.IsLocal)
+ // return;
+
+ // if (!HidingRequestResponse)
+ // {
+ // var response = context.Response;
+ // response.Clear();
+ // response.StatusCode = statusCode;
+ // response.TrySkipIisCustomErrors = true;
+ // response.ContentType = @"text/html; charset=utf-8";
+
+ // var path = server.MapPath("~/CustomErrors/");
+ // var filename = Path.Combine(path, statusCode + ".html");
+ // if (File.Exists(filename))
+ // {
+ // response.WriteFile(filename);
+ // }
+ // else
+ // {
+ // filename = Path.Combine(path, "000.html");
+ // if (File.Exists(filename))
+ // {
+ // var content = File.ReadAllText(filename);
+ // response.Write(String.Format(content, statusCode));
+ // }
+ // }
+ // }
+
+ // server.ClearError();
+ //}
+
+ protected void Application_AcquireRequestState()
+ {
+ if (HttpContext.Current.Session != null)
+ {
+ var culture = Session["Culture"] as CultureInfo;
+ if (culture == null)
+ {
+ String langName = "en-us";
+
+ if (Request.Cookies["Lang"] != null)
+ {
+ langName = Request.Cookies["Lang"].Value;
+ }
+ else if (HttpContext.Current.Request.UserLanguages != null && HttpContext.Current.Request.UserLanguages.Length != 0)
+ {
+ langName = HttpContext.Current.Request.UserLanguages[0].Split(';')[0];
+ }
+ try
+ {
+ culture = CultureInfo.CreateSpecificCulture(langName);
+ }
+ catch
+ {
+ culture = CultureInfo.CreateSpecificCulture("en-us");
+ }
+
+ var cookie = new HttpCookie("Lang", culture.Name)
+ {
+ Expires = DateTime.Now.AddYears(2),
+ };
+ Response.Cookies.Set(cookie);
+
+ Session["Culture"] = culture;
+ }
+ Thread.CurrentThread.CurrentUICulture = culture;
+ Thread.CurrentThread.CurrentCulture = culture;
+ }
+ }
+
+ protected void Application_BeginRequest()
+ {
+ Profiler.Start();
+ }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Models/AheadBehindModel.cs b/GitCandy.Web/Models/AheadBehindModel.cs
new file mode 100644
index 0000000..b130996
--- /dev/null
+++ b/GitCandy.Web/Models/AheadBehindModel.cs
@@ -0,0 +1,10 @@
+
+namespace GitCandy.Models
+{
+ public class AheadBehindModel
+ {
+ public int Ahead { get; set; }
+ public int Behind { get; set; }
+ public CommitModel Commit { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Models/BlameHunkModel.cs b/GitCandy.Web/Models/BlameHunkModel.cs
new file mode 100644
index 0000000..64f89b4
--- /dev/null
+++ b/GitCandy.Web/Models/BlameHunkModel.cs
@@ -0,0 +1,15 @@
+using System;
+
+namespace GitCandy.Models
+{
+ [Serializable]
+ public class BlameHunkModel
+ {
+ public String Code { get; set; }
+ public String MessageShort { get; set; }
+ public String Sha { get; set; }
+ public String Author { get; set; }
+ public String AuthorEmail { get; set; }
+ public DateTimeOffset AuthorDate { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Models/BlameModel.cs b/GitCandy.Web/Models/BlameModel.cs
new file mode 100644
index 0000000..a8b8034
--- /dev/null
+++ b/GitCandy.Web/Models/BlameModel.cs
@@ -0,0 +1,16 @@
+
+using System;
+
+namespace GitCandy.Models
+{
+ public class BlameModel : RepositoryModelBase
+ {
+ public String ReferenceName { get; set; }
+ public String Path { get; set; }
+ public String Sha { get; set; }
+ public BlameHunkModel[] Hunks { get; set; }
+ public String Brush { get; set; }
+ public PathBarModel PathBar { get; set; }
+ public String SizeString { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Models/BlobType.cs b/GitCandy.Web/Models/BlobType.cs
new file mode 100644
index 0000000..9ff9760
--- /dev/null
+++ b/GitCandy.Web/Models/BlobType.cs
@@ -0,0 +1,10 @@
+namespace GitCandy.Models
+{
+ public enum BlobType
+ {
+ Binary,
+ Text,
+ MarkDown,
+ Image,
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Models/BranchesModel.cs b/GitCandy.Web/Models/BranchesModel.cs
new file mode 100644
index 0000000..04e91ab
--- /dev/null
+++ b/GitCandy.Web/Models/BranchesModel.cs
@@ -0,0 +1,10 @@
+
+namespace GitCandy.Models
+{
+ public class BranchesModel : RepositoryModelBase
+ {
+ public CommitModel Commit { get; set; }
+ public AheadBehindModel[] AheadBehinds { get; set; }
+ public bool CanDelete { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Models/BranchSelectorModel.cs b/GitCandy.Web/Models/BranchSelectorModel.cs
new file mode 100644
index 0000000..66cf1fb
--- /dev/null
+++ b/GitCandy.Web/Models/BranchSelectorModel.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+
+namespace GitCandy.Models
+{
+ public class BranchSelectorModel
+ {
+ public IEnumerable<String> Branches { get; set; }
+ public IEnumerable<String> Tags { get; set; }
+ public String Current { get; set; }
+ public bool CurrentIsBranch { get; set; }
+ public String Path { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Models/ChangePasswordModel.cs b/GitCandy.Web/Models/ChangePasswordModel.cs
new file mode 100644
index 0000000..84ef592
--- /dev/null
+++ b/GitCandy.Web/Models/ChangePasswordModel.cs
@@ -0,0 +1,28 @@
+using GitCandy.App_GlobalResources;
+using System.ComponentModel.DataAnnotations;
+using System;
+
+namespace GitCandy.Models
+{
+ public class ChangePasswordModel
+ {
+ [Required(ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_Required")]
+ [StringLength(100, MinimumLength = 6, ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_StringLengthRange")]
+ [DataType(DataType.Password)]
+ [Display(ResourceType = typeof(SR), Name = "Account_OldPassword")]
+ public String OldPassword { get; set; }
+
+ [Required(ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_Required")]
+ [StringLength(100, MinimumLength = 6, ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_StringLengthRange")]
+ [DataType(DataType.Password)]
+ [Display(ResourceType = typeof(SR), Name = "Account_NewPassword")]
+ public String NewPassword { get; set; }
+
+ [Required(ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_Required")]
+ [StringLength(100, MinimumLength = 6, ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_StringLengthRange")]
+ [Compare("NewPassword", ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_Compare")]
+ [DataType(DataType.Password)]
+ [Display(ResourceType = typeof(SR), Name = "Account_ConformPassword")]
+ public String ConformPassword { get; set; }
+ }
+}
diff --git a/GitCandy.Web/Models/CollaborationModel.cs b/GitCandy.Web/Models/CollaborationModel.cs
new file mode 100644
index 0000000..618ab2e
--- /dev/null
+++ b/GitCandy.Web/Models/CollaborationModel.cs
@@ -0,0 +1,25 @@
+using System;
+
+namespace GitCandy.Models
+{
+ public class CollaborationModel : RepositoryModelBase
+ {
+ public UserRole[] Users { get; set; }
+ public TeamRole[] Teams { get; set; }
+
+ public class UserRole
+ {
+ public String Name { get; set; }
+ public bool AllowRead { get; set; }
+ public bool AllowWrite { get; set; }
+ public bool IsOwner { get; set; }
+ }
+
+ public class TeamRole
+ {
+ public String Name { get; set; }
+ public bool AllowRead { get; set; }
+ public bool AllowWrite { get; set; }
+ }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Models/CommitChangeModel.cs b/GitCandy.Web/Models/CommitChangeModel.cs
new file mode 100644
index 0000000..5577b14
--- /dev/null
+++ b/GitCandy.Web/Models/CommitChangeModel.cs
@@ -0,0 +1,15 @@
+using System;
+using LibGit2Sharp;
+
+namespace GitCandy.Models
+{
+ public class CommitChangeModel
+ {
+ public String OldPath { get; set; }
+ public String Path { get; set; }
+ public ChangeKind ChangeKind { get; set; }
+ public int LinesAdded { get; set; }
+ public int LinesDeleted { get; set; }
+ public String Patch { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Models/CommitModel.cs b/GitCandy.Web/Models/CommitModel.cs
new file mode 100644
index 0000000..252c20a
--- /dev/null
+++ b/GitCandy.Web/Models/CommitModel.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using LibGit2Sharp;
+
+namespace GitCandy.Models
+{
+ public class CommitModel : RepositoryModelBase
+ {
+ public String Sha { get; set; }
+ public String ReferenceName { get; set; }
+ public String CommitMessageShort { get; set; }
+ public String CommitMessage { get; set; }
+ public Signature Author { get; set; }
+ public Signature Committer { get; set; }
+ public String[] Parents { get; set; }
+ public IEnumerable<CommitChangeModel> Changes { get; set; }
+ public PathBarModel PathBar { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Models/CommitsModel.cs b/GitCandy.Web/Models/CommitsModel.cs
new file mode 100644
index 0000000..8b806ea
--- /dev/null
+++ b/GitCandy.Web/Models/CommitsModel.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+
+namespace GitCandy.Models
+{
+ public class CommitsModel : RepositoryModelBase
+ {
+ public String ReferenceName { get; set; }
+ public String Sha { get; set; }
+ public String Path { get; set; }
+ public IEnumerable<CommitModel> Commits { get; set; }
+ public int CurrentPage { get; set; }
+ public int ItemCount { get; set; }
+ public PathBarModel PathBar { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Models/CompareModel.cs b/GitCandy.Web/Models/CompareModel.cs
new file mode 100644
index 0000000..139a5a7
--- /dev/null
+++ b/GitCandy.Web/Models/CompareModel.cs
@@ -0,0 +1,14 @@
+
+using System;
+
+namespace GitCandy.Models
+{
+ public class CompareModel : RepositoryModelBase
+ {
+ public String[] Branches { get; set; }
+ public BranchSelectorModel BaseBranchSelector { get; set; }
+ public BranchSelectorModel CompareBranchSelector { get; set; }
+ public CommitModel CompareResult { get; set; }
+ public CommitModel[] Walks { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Models/ContributorsModel.cs b/GitCandy.Web/Models/ContributorsModel.cs
new file mode 100644
index 0000000..a998ee5
--- /dev/null
+++ b/GitCandy.Web/Models/ContributorsModel.cs
@@ -0,0 +1,8 @@
+
+namespace GitCandy.Models
+{
+ public class ContributorsModel : RepositoryModelBase
+ {
+ public RepositoryStatisticsModel Statistics { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Models/GitUrl.cs b/GitCandy.Web/Models/GitUrl.cs
new file mode 100644
index 0000000..e104c88
--- /dev/null
+++ b/GitCandy.Web/Models/GitUrl.cs
@@ -0,0 +1,11 @@
+
+using System;
+
+namespace GitCandy.Models
+{
+ public class GitUrl
+ {
+ public String Type { get; set; }
+ public String Url { get; set; }
+ }
+}
diff --git a/GitCandy.Web/Models/LoginModel.cs b/GitCandy.Web/Models/LoginModel.cs
new file mode 100644
index 0000000..b1d05d5
--- /dev/null
+++ b/GitCandy.Web/Models/LoginModel.cs
@@ -0,0 +1,16 @@
+using GitCandy.App_GlobalResources;
+using System.ComponentModel.DataAnnotations;
+using System;
+
+namespace GitCandy.Models
+{
+ public class LoginModel
+ {
+ [Display(ResourceType = typeof(SR), Name = "Account_UsernameOrEmail")]
+ public String ID { get; set; }
+
+ [Display(ResourceType = typeof(SR), Name = "Account_Password")]
+ [DataType(DataType.Password)]
+ public String Password { get; set; }
+ }
+}
diff --git a/GitCandy.Web/Models/PathBarModel.cs b/GitCandy.Web/Models/PathBarModel.cs
new file mode 100644
index 0000000..343bf7d
--- /dev/null
+++ b/GitCandy.Web/Models/PathBarModel.cs
@@ -0,0 +1,15 @@
+
+using System;
+
+namespace GitCandy.Models
+{
+ public class PathBarModel
+ {
+ public String Name { get; set; }
+ public String ReferenceName { get; set; }
+ public String ReferenceSha { get; set; }
+ public String Path { get; set; }
+ public String Action { get; set; }
+ public bool HideLastSlash { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Models/RepositoryListModel.cs b/GitCandy.Web/Models/RepositoryListModel.cs
new file mode 100644
index 0000000..9f63479
--- /dev/null
+++ b/GitCandy.Web/Models/RepositoryListModel.cs
@@ -0,0 +1,9 @@
+namespace GitCandy.Models
+{
+ public class RepositoryListModel
+ {
+ public RepositoryModel[] Collaborations { get; set; }
+ public RepositoryModel[] Repositories { get; set; }
+ public bool CanCreateRepository { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Models/RepositoryModel.cs b/GitCandy.Web/Models/RepositoryModel.cs
new file mode 100644
index 0000000..d1baae1
--- /dev/null
+++ b/GitCandy.Web/Models/RepositoryModel.cs
@@ -0,0 +1,59 @@
+using GitCandy.App_GlobalResources;
+using GitCandy.Base;
+using System.ComponentModel.DataAnnotations;
+using System.Web.Mvc;
+using System;
+using System.Collections.Generic;
+
+namespace GitCandy.Models
+{
+ public class RepositoryModel
+ {
+ [Required(ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_Required")]
+ [StringLength(50, MinimumLength = 2, ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_StringLengthRange")]
+ [RegularExpression(RegularExpression.Repositoryname, ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_Name")]
+ [Display(ResourceType = typeof(SR), Name = "Repository_Name")]
+ public String Name { get; set; }
+
+ [StringLength(500, ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_StringLength")]
+ [Display(ResourceType = typeof(SR), Name = "Repository_Description")]
+ [DisplayFormat(ConvertEmptyStringToNull = false)]
+ public String Description { get; set; }
+
+ [Display(ResourceType = typeof(SR), Name = "Repository_IsPrivate")]
+ [UIHint("YesNo")]
+ public bool IsPrivate { get; set; }
+
+ [Display(ResourceType = typeof(SR), Name = "Repository_AllowAnonymousRead")]
+ [UIHint("YesNo")]
+ public bool AllowAnonymousRead { get; set; }
+
+ [Display(ResourceType = typeof(SR), Name = "Repository_AllowAnonymousWrite")]
+ [UIHint("YesNo")]
+ public bool AllowAnonymousWrite { get; set; }
+
+ [Display(ResourceType = typeof(SR), Name = "Repository_Collaborators")]
+ [UIHint("Maps")]
+ [AdditionalMetadata("Controller", "Account")]
+ public IDictionary<String, String> Collaborators { get; set; }
+
+ [Display(ResourceType = typeof(SR), Name = "Repository_Teams")]
+ [UIHint("Maps")]
+ [AdditionalMetadata("Controller", "Team")]
+ public IDictionary<String, String> Teams { get; set; }
+
+ [Display(ResourceType = typeof(SR), Name = "Repository_DefaultBranch")]
+ public String DefaultBranch { get; set; }
+
+ public String[] LocalBranches { get; set; }
+
+ public bool CurrentUserIsOwner { get; set; }
+
+ public Int32 Commits { get; set; }
+ public Int32 Branches { get; set; }
+ public Int32 Contributors { get; set; }
+ public DateTime LastCommit { get; set; }
+ public Int32 Views { get; set; }
+ public DateTime LastView { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Models/RepositoryModelBase.cs b/GitCandy.Web/Models/RepositoryModelBase.cs
new file mode 100644
index 0000000..43f53f8
--- /dev/null
+++ b/GitCandy.Web/Models/RepositoryModelBase.cs
@@ -0,0 +1,10 @@
+using System;
+
+namespace GitCandy.Models
+{
+ public abstract class RepositoryModelBase
+ {
+ public String RepositoryName { get; set; }
+ public BranchSelectorModel BranchSelector { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Models/RepositoryScope.cs b/GitCandy.Web/Models/RepositoryScope.cs
new file mode 100644
index 0000000..20cd0a1
--- /dev/null
+++ b/GitCandy.Web/Models/RepositoryScope.cs
@@ -0,0 +1,13 @@
+using System;
+
+namespace GitCandy.Models
+{
+ [Serializable]
+ public class RepositoryScope
+ {
+ public int Commits { get; set; }
+ public int Branches { get; set; }
+ public int Tags { get; set; }
+ public int Contributors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Models/RepositoryStatisticsModel.cs b/GitCandy.Web/Models/RepositoryStatisticsModel.cs
new file mode 100644
index 0000000..9a16561
--- /dev/null
+++ b/GitCandy.Web/Models/RepositoryStatisticsModel.cs
@@ -0,0 +1,29 @@
+using System;
+
+namespace GitCandy.Models
+{
+ public class RepositoryStatisticsModel
+ {
+ public Statistics Default { get; set; }
+ public Statistics Current { get; set; }
+ public long RepositorySize { get; set; }
+
+ [Serializable]
+ public class Statistics
+ {
+ public String Branch { get; set; }
+ public int NumberOfFiles { get; set; }
+ public int NumberOfCommits { get; set; }
+ public long SizeOfSource { get; set; }
+ public int NumberOfContributors { get; set; }
+ public ContributorCommits[] OrderedCommits { get; set; }
+ }
+
+ [Serializable]
+ public class ContributorCommits
+ {
+ public String Author { get; set; }
+ public int CommitsCount { get; set; }
+ }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Models/SettingModel.cs b/GitCandy.Web/Models/SettingModel.cs
new file mode 100644
index 0000000..3a70aef
--- /dev/null
+++ b/GitCandy.Web/Models/SettingModel.cs
@@ -0,0 +1,56 @@
+using GitCandy.App_GlobalResources;
+using System.ComponentModel.DataAnnotations;
+using System;
+
+namespace GitCandy.Models
+{
+ public class SettingModel
+ {
+ [Display(ResourceType = typeof(SR), Name = "Setting_IsPublicServer")]
+ public bool IsPublicServer { get; set; }
+
+ [Display(ResourceType = typeof(SR), Name = "Setting_ForceSsl")]
+ public bool ForceSsl { get; set; }
+
+ [Range(1, 65534, ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_NumberRange")]
+ [Display(ResourceType = typeof(SR), Name = "Setting_SslPort")]
+ public int SslPort { get; set; }
+
+ [Range(1, 65534, ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_NumberRange")]
+ [Display(ResourceType = typeof(SR), Name = "Setting_SshPort")]
+ public int SshPort { get; set; }
+
+ [Display(ResourceType = typeof(SR), Name = "Setting_EnableSsh")]
+ public bool EnableSsh { get; set; }
+
+ [Display(ResourceType = typeof(SR), Name = "Setting_LocalSkipCustomError")]
+ public bool LocalSkipCustomError { get; set; }
+
+ [Display(ResourceType = typeof(SR), Name = "Setting_AllowRegisterUser")]
+ public bool AllowRegisterUser { get; set; }
+
+ [Display(ResourceType = typeof(SR), Name = "Setting_AllowRepositoryCreation")]
+ public bool AllowRepositoryCreation { get; set; }
+
+ [Display(ResourceType = typeof(SR), Name = "Setting_RepositoryPath")]
+ public String RepositoryPath { get; set; }
+
+ [Display(ResourceType = typeof(SR), Name = "Setting_CachePath")]
+ public String CachePath { get; set; }
+
+ [Display(ResourceType = typeof(SR), Name = "Setting_GitCorePath")]
+ public String GitCorePath { get; set; }
+
+ [Range(5, 50, ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_NumberRange")]
+ [Display(ResourceType = typeof(SR), Name = "Setting_NumberOfCommitsPerPage")]
+ public int NumberOfCommitsPerPage { get; set; }
+
+ [Range(5, 50, ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_NumberRange")]
+ [Display(ResourceType = typeof(SR), Name = "Setting_NumberOfItemsPerList")]
+ public int NumberOfItemsPerList { get; set; }
+
+ [Range(10, 100, ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_NumberRange")]
+ [Display(ResourceType = typeof(SR), Name = "Setting_NumberOfRepositoryContributors")]
+ public int NumberOfRepositoryContributors { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Models/SshModel.cs b/GitCandy.Web/Models/SshModel.cs
new file mode 100644
index 0000000..bc97e3e
--- /dev/null
+++ b/GitCandy.Web/Models/SshModel.cs
@@ -0,0 +1,16 @@
+
+using System;
+
+namespace GitCandy.Models
+{
+ public class SshModel
+ {
+ public String Username { get; set; }
+ public SshKey[] SshKeys { get; set; }
+
+ public class SshKey
+ {
+ public String Name { get; set; }
+ }
+ }
+}
diff --git a/GitCandy.Web/Models/TagModel.cs b/GitCandy.Web/Models/TagModel.cs
new file mode 100644
index 0000000..f11c750
--- /dev/null
+++ b/GitCandy.Web/Models/TagModel.cs
@@ -0,0 +1,12 @@
+using System;
+
+namespace GitCandy.Models
+{
+ public class TagModel
+ {
+ public String ReferenceName { get; set; }
+ public String Sha { get; set; }
+ public DateTimeOffset When { get; set; }
+ public String MessageShort { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Models/TagsModel.cs b/GitCandy.Web/Models/TagsModel.cs
new file mode 100644
index 0000000..1fbedc6
--- /dev/null
+++ b/GitCandy.Web/Models/TagsModel.cs
@@ -0,0 +1,10 @@
+namespace GitCandy.Models
+{
+ public class TagsModel : RepositoryModelBase
+ {
+ public TagModel[] Tags { get; set; }
+ public bool HasTags { get { return Tags != null && Tags.Length != 0; } }
+
+ public bool CanDelete { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Models/TeamListModel.cs b/GitCandy.Web/Models/TeamListModel.cs
new file mode 100644
index 0000000..55d9313
--- /dev/null
+++ b/GitCandy.Web/Models/TeamListModel.cs
@@ -0,0 +1,10 @@
+
+namespace GitCandy.Models
+{
+ public class TeamListModel
+ {
+ public TeamModel[] Teams { get; set; }
+ public int CurrentPage { get; set; }
+ public int ItemCount { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Models/TeamModel.cs b/GitCandy.Web/Models/TeamModel.cs
new file mode 100644
index 0000000..d1cf090
--- /dev/null
+++ b/GitCandy.Web/Models/TeamModel.cs
@@ -0,0 +1,55 @@
+using GitCandy.App_GlobalResources;
+using GitCandy.Base;
+using System.ComponentModel.DataAnnotations;
+using System.Web.Mvc;
+using System;
+using System.Collections.Generic;
+
+namespace GitCandy.Models
+{
+ public class TeamModel
+ {
+ [Required(ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_Required")]
+ [StringLength(20, MinimumLength = 2, ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_StringLengthRange")]
+ [RegularExpression(RegularExpression.Teamname, ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_Name")]
+ [Display(ResourceType = typeof(SR), Name = "Team_Name")]
+ public String Name { get; set; }
+
+ [StringLength(20, MinimumLength = 2, ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_StringLength")]
+ [Display(ResourceType = typeof(SR), Name = "Account_Nickname")]
+ [DisplayFormat(ConvertEmptyStringToNull = false)]
+ public String Nickname { get; set; }
+
+ [StringLength(500, ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_StringLength")]
+ [Display(ResourceType = typeof(SR), Name = "Team_Description")]
+ [DisplayFormat(ConvertEmptyStringToNull = false)]
+ public String Description { get; set; }
+
+ [Display(ResourceType = typeof(SR), Name = "Team_Members")]
+ [UIHint("Maps")]
+ [AdditionalMetadata("Controller", "Account")]
+ public IDictionary<String, String> Members { get; set; }
+
+ public UserRole[] MembersRole { get; set; }
+
+ [Display(ResourceType = typeof(SR), Name = "Team_Repositories")]
+ [UIHint("Members")]
+ [AdditionalMetadata("Controller", "Repository")]
+ public String[] Repositories { get; set; }
+
+ public RepositoryRole[] RepositoriesRole { get; set; }
+
+ public class UserRole
+ {
+ public String Name { get; set; }
+ public bool IsAdministrator { get; set; }
+ }
+
+ public class RepositoryRole
+ {
+ public String Name { get; set; }
+ public bool AllowRead { get; set; }
+ public bool AllowWrite { get; set; }
+ }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Models/TreeEntryModel.cs b/GitCandy.Web/Models/TreeEntryModel.cs
new file mode 100644
index 0000000..b963049
--- /dev/null
+++ b/GitCandy.Web/Models/TreeEntryModel.cs
@@ -0,0 +1,23 @@
+using LibGit2Sharp;
+using System.Text;
+using System;
+
+namespace GitCandy.Models
+{
+ public class TreeEntryModel : RepositoryModelBase
+ {
+ public String Name { get; set; }
+ public String Path { get; set; }
+ public String ReferenceName { get; set; }
+ public CommitModel Commit { get; set; }
+ public String Sha { get; set; }
+ public TreeEntryTargetType EntryType { get; set; }
+ public byte[] RawData { get; set; }
+ public String SizeString { get; set; }
+ public String TextContent { get; set; }
+ public String TextBrush { get; set; }
+ public BlobType BlobType { get; set; }
+ public Encoding BlobEncoding { get; set; }
+ public PathBarModel PathBar { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Models/TreeModel.cs b/GitCandy.Web/Models/TreeModel.cs
new file mode 100644
index 0000000..390ad07
--- /dev/null
+++ b/GitCandy.Web/Models/TreeModel.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+
+namespace GitCandy.Models
+{
+ public class TreeModel : RepositoryModelBase
+ {
+ public String ReferenceName { get; set; }
+ public String Path { get; set; }
+ public CommitModel Commit { get; set; }
+ public IEnumerable<TreeEntryModel> Entries { get; set; }
+ public TreeEntryModel Readme { get; set; }
+ public bool IsRoot { get { return String.IsNullOrEmpty(Path) || Path == "\\" || Path == "/"; } }
+ public RepositoryScope Scope { get; set; }
+ public GitUrl[] GitUrls { get; set; }
+ public String Description { get; set; }
+ public PathBarModel PathBar { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Models/UserListModel.cs b/GitCandy.Web/Models/UserListModel.cs
new file mode 100644
index 0000000..1f9e112
--- /dev/null
+++ b/GitCandy.Web/Models/UserListModel.cs
@@ -0,0 +1,10 @@
+
+namespace GitCandy.Models
+{
+ public class UserListModel
+ {
+ public UserModel[] Users { get; set; }
+ public int CurrentPage { get; set; }
+ public int ItemCount { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Models/UserModel.cs b/GitCandy.Web/Models/UserModel.cs
new file mode 100644
index 0000000..233244e
--- /dev/null
+++ b/GitCandy.Web/Models/UserModel.cs
@@ -0,0 +1,61 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using GitCandy.App_GlobalResources;
+using GitCandy.Base;
+
+namespace GitCandy.Models
+{
+ public class UserModel
+ {
+ [Required(ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_Required")]
+ [StringLength(20, MinimumLength = 2, ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_StringLengthRange")]
+ [RegularExpression(RegularExpression.Username, ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_Name")]
+ [Display(ResourceType = typeof(SR), Name = "Account_Username")]
+ public String Name { get; set; }
+
+ [StringLength(20, MinimumLength = 2, ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_StringLength")]
+ [Display(ResourceType = typeof(SR), Name = "Account_Nickname")]
+ [DisplayFormat(ConvertEmptyStringToNull = false)]
+ public String Nickname { get; set; }
+
+ [Required(ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_Required")]
+ [StringLength(50, ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_StringLength")]
+ [RegularExpression(RegularExpression.Email, ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_Email")]
+ [DataType(DataType.EmailAddress)]
+ [Display(ResourceType = typeof(SR), Name = "Account_Email")]
+ public String Email { get; set; }
+
+ [Required(ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_Required")]
+ [StringLength(20, MinimumLength = 5, ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_StringLengthRange")]
+ [DataType(DataType.Password)]
+ [Display(ResourceType = typeof(SR), Name = "Account_Password")]
+ public String Password { get; set; }
+
+ [Required(ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_Required")]
+ [StringLength(20, MinimumLength = 6, ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_StringLengthRange")]
+ [Compare("Password", ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_Compare")]
+ [DataType(DataType.Password)]
+ [Display(ResourceType = typeof(SR), Name = "Account_ConformPassword")]
+ public String ConformPassword { get; set; }
+
+ [StringLength(500, ErrorMessageResourceType = typeof(SR), ErrorMessageResourceName = "Validation_StringLength")]
+ [Display(ResourceType = typeof(SR), Name = "Account_Description")]
+ [DisplayFormat(ConvertEmptyStringToNull = false)]
+ public String Description { get; set; }
+
+ [Display(ResourceType = typeof(SR), Name = "Account_IsSystemAdministrator")]
+ [UIHint("YesNo")]
+ public bool IsSystemAdministrator { get; set; }
+
+ [Display(ResourceType = typeof(SR), Name = "Account_Teams")]
+ [UIHint("Maps")]
+ [System.Web.Mvc.AdditionalMetadata("Controller", "Team")]
+ public IDictionary<String, String> Teams { get; set; }
+
+ [Display(ResourceType = typeof(SR), Name = "Account_Repositories")]
+ [UIHint("Members")]
+ [System.Web.Mvc.AdditionalMetadata("Controller", "Repository")]
+ public String[] Respositories { get; set; }
+ }
+}
diff --git a/GitCandy.Web/packages.config b/GitCandy.Web/packages.config
new file mode 100644
index 0000000..36187ba
--- /dev/null
+++ b/GitCandy.Web/packages.config
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+ <package id="bootstrap" version="3.3.7" targetFramework="net45" />
+ <package id="jQuery" version="2.0.3" targetFramework="net45" />
+ <package id="LibGit2Sharp" version="0.22.0" targetFramework="net45" />
+ <package id="LibGit2Sharp.NativeBinaries" version="1.0.129" targetFramework="net45" />
+ <package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net45" />
+ <package id="Microsoft.AspNet.Mvc.zh-Hans" version="5.2.3" targetFramework="net45" />
+ <package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net45" />
+ <package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net45" />
+ <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />
+ <package id="SharpZipLib" version="0.86.0" targetFramework="net45" />
+</packages>
\ No newline at end of file
diff --git a/GitCandy.Web/Properties/AssemblyInfo.cs b/GitCandy.Web/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..3af45a0
--- /dev/null
+++ b/GitCandy.Web/Properties/AssemblyInfo.cs
@@ -0,0 +1,40 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的一般信息由以下
+// 控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("糖果仓库")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("GitCandy.Web")]
+[assembly: AssemblyCopyright("Copyright © 新生命开发团队 2002-2016")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+//将 ComVisible 设置为 false 将使此程序集中的类型
+//对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型,
+//请将此类型的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("d1e514b2-2a79-4101-bb0d-ff2139ffd1ec")]
+
+// 程序集的版本信息由下列四个值组成:
+//
+// 主版本
+// 次版本
+// 生成号
+// 修订号
+//
+//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
+// 方法是按如下所示使用“*”: :
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyFileVersion("1.0.2016.1122")]
+
+/*
+ * v1.0.2016.1122 迁移到XCode,合并魔方
+ */
diff --git a/GitCandy.Web/Properties/PublishProfiles/GitCandy.pubxml b/GitCandy.Web/Properties/PublishProfiles/GitCandy.pubxml
new file mode 100644
index 0000000..883570b
--- /dev/null
+++ b/GitCandy.Web/Properties/PublishProfiles/GitCandy.pubxml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+您 Web 项目的发布/打包进程将使用此文件。您可以通过编辑此 MSBuild 文件
+来自定义该进程的行为。若要了解与此相关的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkID=208121。
+-->
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <WebPublishMethod>FileSystem</WebPublishMethod>
+ <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
+ <LastUsedPlatform>Any CPU</LastUsedPlatform>
+ <SiteUrlToLaunchAfterPublish />
+ <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
+ <PrecompileBeforePublish>True</PrecompileBeforePublish>
+ <EnableUpdateable>True</EnableUpdateable>
+ <DebugSymbols>False</DebugSymbols>
+ <WDPMergeOption>MergeAllOutputsToASingleAssembly</WDPMergeOption>
+ <UseMerge>True</UseMerge>
+ <SingleAssemblyName>GitCandy.Web</SingleAssemblyName>
+ <DeleteAppCodeCompiledFiles>True</DeleteAppCodeCompiledFiles>
+ <ExcludeApp_Data>False</ExcludeApp_Data>
+ <publishUrl>..\..\Git</publishUrl>
+ <DeleteExistingFiles>True</DeleteExistingFiles>
+ </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/GitCandy.Web/Scripts/_references.js b/GitCandy.Web/Scripts/_references.js
new file mode 100644
index 0000000..7b929ff
--- /dev/null
+++ b/GitCandy.Web/Scripts/_references.js
@@ -0,0 +1 @@
+/// <reference path="jquery-2.0.3.js" />
diff --git a/GitCandy.Web/Scripts/bootstrap-switch.js b/GitCandy.Web/Scripts/bootstrap-switch.js
new file mode 100644
index 0000000..363675c
--- /dev/null
+++ b/GitCandy.Web/Scripts/bootstrap-switch.js
@@ -0,0 +1,710 @@
+/* ========================================================================
+ * bootstrap-switch - v3.3.2
+ * http://www.bootstrap-switch.org
+ * ========================================================================
+ * Copyright 2012-2013 Mattia Larentis
+ *
+ * ========================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================================
+ */
+
+(function() {
+ var __slice = [].slice;
+
+ (function($, window) {
+ "use strict";
+ var BootstrapSwitch;
+ BootstrapSwitch = (function() {
+ function BootstrapSwitch(element, options) {
+ if (options == null) {
+ options = {};
+ }
+ this.$element = $(element);
+ this.options = $.extend({}, $.fn.bootstrapSwitch.defaults, {
+ state: this.$element.is(":checked"),
+ size: this.$element.data("size"),
+ animate: this.$element.data("animate"),
+ disabled: this.$element.is(":disabled"),
+ readonly: this.$element.is("[readonly]"),
+ indeterminate: this.$element.data("indeterminate"),
+ inverse: this.$element.data("inverse"),
+ radioAllOff: this.$element.data("radio-all-off"),
+ onColor: this.$element.data("on-color"),
+ offColor: this.$element.data("off-color"),
+ onText: this.$element.data("on-text"),
+ offText: this.$element.data("off-text"),
+ labelText: this.$element.data("label-text"),
+ handleWidth: this.$element.data("handle-width"),
+ labelWidth: this.$element.data("label-width"),
+ baseClass: this.$element.data("base-class"),
+ wrapperClass: this.$element.data("wrapper-class")
+ }, options);
+ this.$wrapper = $("<div>", {
+ "class": (function(_this) {
+ return function() {
+ var classes;
+ classes = ["" + _this.options.baseClass].concat(_this._getClasses(_this.options.wrapperClass));
+ classes.push(_this.options.state ? "" + _this.options.baseClass + "-on" : "" + _this.options.baseClass + "-off");
+ if (_this.options.size != null) {
+ classes.push("" + _this.options.baseClass + "-" + _this.options.size);
+ }
+ if (_this.options.disabled) {
+ classes.push("" + _this.options.baseClass + "-disabled");
+ }
+ if (_this.options.readonly) {
+ classes.push("" + _this.options.baseClass + "-readonly");
+ }
+ if (_this.options.indeterminate) {
+ classes.push("" + _this.options.baseClass + "-indeterminate");
+ }
+ if (_this.options.inverse) {
+ classes.push("" + _this.options.baseClass + "-inverse");
+ }
+ if (_this.$element.attr("id")) {
+ classes.push("" + _this.options.baseClass + "-id-" + (_this.$element.attr("id")));
+ }
+ return classes.join(" ");
+ };
+ })(this)()
+ });
+ this.$container = $("<div>", {
+ "class": "" + this.options.baseClass + "-container"
+ });
+ this.$on = $("<span>", {
+ html: this.options.onText,
+ "class": "" + this.options.baseClass + "-handle-on " + this.options.baseClass + "-" + this.options.onColor
+ });
+ this.$off = $("<span>", {
+ html: this.options.offText,
+ "class": "" + this.options.baseClass + "-handle-off " + this.options.baseClass + "-" + this.options.offColor
+ });
+ this.$label = $("<span>", {
+ html: this.options.labelText,
+ "class": "" + this.options.baseClass + "-label"
+ });
+ this.$element.on("init.bootstrapSwitch", (function(_this) {
+ return function() {
+ return _this.options.onInit.apply(element, arguments);
+ };
+ })(this));
+ this.$element.on("switchChange.bootstrapSwitch", (function(_this) {
+ return function() {
+ return _this.options.onSwitchChange.apply(element, arguments);
+ };
+ })(this));
+ this.$container = this.$element.wrap(this.$container).parent();
+ this.$wrapper = this.$container.wrap(this.$wrapper).parent();
+ this.$element.before(this.options.inverse ? this.$off : this.$on).before(this.$label).before(this.options.inverse ? this.$on : this.$off);
+ if (this.options.indeterminate) {
+ this.$element.prop("indeterminate", true);
+ }
+ this._init();
+ this._elementHandlers();
+ this._handleHandlers();
+ this._labelHandlers();
+ this._formHandler();
+ this._externalLabelHandler();
+ this.$element.trigger("init.bootstrapSwitch");
+ }
+
+ BootstrapSwitch.prototype._constructor = BootstrapSwitch;
+
+ BootstrapSwitch.prototype.state = function(value, skip) {
+ if (typeof value === "undefined") {
+ return this.options.state;
+ }
+ if (this.options.disabled || this.options.readonly) {
+ return this.$element;
+ }
+ if (this.options.state && !this.options.radioAllOff && this.$element.is(":radio")) {
+ return this.$element;
+ }
+ if (this.options.indeterminate) {
+ this.indeterminate(false);
+ }
+ value = !!value;
+ this.$element.prop("checked", value).trigger("change.bootstrapSwitch", skip);
+ return this.$element;
+ };
+
+ BootstrapSwitch.prototype.toggleState = function(skip) {
+ if (this.options.disabled || this.options.readonly) {
+ return this.$element;
+ }
+ if (this.options.indeterminate) {
+ this.indeterminate(false);
+ return this.state(true);
+ } else {
+ return this.$element.prop("checked", !this.options.state).trigger("change.bootstrapSwitch", skip);
+ }
+ };
+
+ BootstrapSwitch.prototype.size = function(value) {
+ if (typeof value === "undefined") {
+ return this.options.size;
+ }
+ if (this.options.size != null) {
+ this.$wrapper.removeClass("" + this.options.baseClass + "-" + this.options.size);
+ }
+ if (value) {
+ this.$wrapper.addClass("" + this.options.baseClass + "-" + value);
+ }
+ this._width();
+ this._containerPosition();
+ this.options.size = value;
+ return this.$element;
+ };
+
+ BootstrapSwitch.prototype.animate = function(value) {
+ if (typeof value === "undefined") {
+ return this.options.animate;
+ }
+ value = !!value;
+ if (value === this.options.animate) {
+ return this.$element;
+ }
+ return this.toggleAnimate();
+ };
+
+ BootstrapSwitch.prototype.toggleAnimate = function() {
+ this.options.animate = !this.options.animate;
+ this.$wrapper.toggleClass("" + this.options.baseClass + "-animate");
+ return this.$element;
+ };
+
+ BootstrapSwitch.prototype.disabled = function(value) {
+ if (typeof value === "undefined") {
+ return this.options.disabled;
+ }
+ value = !!value;
+ if (value === this.options.disabled) {
+ return this.$element;
+ }
+ return this.toggleDisabled();
+ };
+
+ BootstrapSwitch.prototype.toggleDisabled = function() {
+ this.options.disabled = !this.options.disabled;
+ this.$element.prop("disabled", this.options.disabled);
+ this.$wrapper.toggleClass("" + this.options.baseClass + "-disabled");
+ return this.$element;
+ };
+
+ BootstrapSwitch.prototype.readonly = function(value) {
+ if (typeof value === "undefined") {
+ return this.options.readonly;
+ }
+ value = !!value;
+ if (value === this.options.readonly) {
+ return this.$element;
+ }
+ return this.toggleReadonly();
+ };
+
+ BootstrapSwitch.prototype.toggleReadonly = function() {
+ this.options.readonly = !this.options.readonly;
+ this.$element.prop("readonly", this.options.readonly);
+ this.$wrapper.toggleClass("" + this.options.baseClass + "-readonly");
+ return this.$element;
+ };
+
+ BootstrapSwitch.prototype.indeterminate = function(value) {
+ if (typeof value === "undefined") {
+ return this.options.indeterminate;
+ }
+ value = !!value;
+ if (value === this.options.indeterminate) {
+ return this.$element;
+ }
+ return this.toggleIndeterminate();
+ };
+
+ BootstrapSwitch.prototype.toggleIndeterminate = function() {
+ this.options.indeterminate = !this.options.indeterminate;
+ this.$element.prop("indeterminate", this.options.indeterminate);
+ this.$wrapper.toggleClass("" + this.options.baseClass + "-indeterminate");
+ this._containerPosition();
+ return this.$element;
+ };
+
+ BootstrapSwitch.prototype.inverse = function(value) {
+ if (typeof value === "undefined") {
+ return this.options.inverse;
+ }
+ value = !!value;
+ if (value === this.options.inverse) {
+ return this.$element;
+ }
+ return this.toggleInverse();
+ };
+
+ BootstrapSwitch.prototype.toggleInverse = function() {
+ var $off, $on;
+ this.$wrapper.toggleClass("" + this.options.baseClass + "-inverse");
+ $on = this.$on.clone(true);
+ $off = this.$off.clone(true);
+ this.$on.replaceWith($off);
+ this.$off.replaceWith($on);
+ this.$on = $off;
+ this.$off = $on;
+ this.options.inverse = !this.options.inverse;
+ return this.$element;
+ };
+
+ BootstrapSwitch.prototype.onColor = function(value) {
+ var color;
+ color = this.options.onColor;
+ if (typeof value === "undefined") {
+ return color;
+ }
+ if (color != null) {
+ this.$on.removeClass("" + this.options.baseClass + "-" + color);
+ }
+ this.$on.addClass("" + this.options.baseClass + "-" + value);
+ this.options.onColor = value;
+ return this.$element;
+ };
+
+ BootstrapSwitch.prototype.offColor = function(value) {
+ var color;
+ color = this.options.offColor;
+ if (typeof value === "undefined") {
+ return color;
+ }
+ if (color != null) {
+ this.$off.removeClass("" + this.options.baseClass + "-" + color);
+ }
+ this.$off.addClass("" + this.options.baseClass + "-" + value);
+ this.options.offColor = value;
+ return this.$element;
+ };
+
+ BootstrapSwitch.prototype.onText = function(value) {
+ if (typeof value === "undefined") {
+ return this.options.onText;
+ }
+ this.$on.html(value);
+ this._width();
+ this._containerPosition();
+ this.options.onText = value;
+ return this.$element;
+ };
+
+ BootstrapSwitch.prototype.offText = function(value) {
+ if (typeof value === "undefined") {
+ return this.options.offText;
+ }
+ this.$off.html(value);
+ this._width();
+ this._containerPosition();
+ this.options.offText = value;
+ return this.$element;
+ };
+
+ BootstrapSwitch.prototype.labelText = function(value) {
+ if (typeof value === "undefined") {
+ return this.options.labelText;
+ }
+ this.$label.html(value);
+ this._width();
+ this.options.labelText = value;
+ return this.$element;
+ };
+
+ BootstrapSwitch.prototype.handleWidth = function(value) {
+ if (typeof value === "undefined") {
+ return this.options.handleWidth;
+ }
+ this.options.handleWidth = value;
+ this._width();
+ this._containerPosition();
+ return this.$element;
+ };
+
+ BootstrapSwitch.prototype.labelWidth = function(value) {
+ if (typeof value === "undefined") {
+ return this.options.labelWidth;
+ }
+ this.options.labelWidth = value;
+ this._width();
+ this._containerPosition();
+ return this.$element;
+ };
+
+ BootstrapSwitch.prototype.baseClass = function(value) {
+ return this.options.baseClass;
+ };
+
+ BootstrapSwitch.prototype.wrapperClass = function(value) {
+ if (typeof value === "undefined") {
+ return this.options.wrapperClass;
+ }
+ if (!value) {
+ value = $.fn.bootstrapSwitch.defaults.wrapperClass;
+ }
+ this.$wrapper.removeClass(this._getClasses(this.options.wrapperClass).join(" "));
+ this.$wrapper.addClass(this._getClasses(value).join(" "));
+ this.options.wrapperClass = value;
+ return this.$element;
+ };
+
+ BootstrapSwitch.prototype.radioAllOff = function(value) {
+ if (typeof value === "undefined") {
+ return this.options.radioAllOff;
+ }
+ value = !!value;
+ if (value === this.options.radioAllOff) {
+ return this.$element;
+ }
+ this.options.radioAllOff = value;
+ return this.$element;
+ };
+
+ BootstrapSwitch.prototype.onInit = function(value) {
+ if (typeof value === "undefined") {
+ return this.options.onInit;
+ }
+ if (!value) {
+ value = $.fn.bootstrapSwitch.defaults.onInit;
+ }
+ this.options.onInit = value;
+ return this.$element;
+ };
+
+ BootstrapSwitch.prototype.onSwitchChange = function(value) {
+ if (typeof value === "undefined") {
+ return this.options.onSwitchChange;
+ }
+ if (!value) {
+ value = $.fn.bootstrapSwitch.defaults.onSwitchChange;
+ }
+ this.options.onSwitchChange = value;
+ return this.$element;
+ };
+
+ BootstrapSwitch.prototype.destroy = function() {
+ var $form;
+ $form = this.$element.closest("form");
+ if ($form.length) {
+ $form.off("reset.bootstrapSwitch").removeData("bootstrap-switch");
+ }
+ this.$container.children().not(this.$element).remove();
+ this.$element.unwrap().unwrap().off(".bootstrapSwitch").removeData("bootstrap-switch");
+ return this.$element;
+ };
+
+ BootstrapSwitch.prototype._width = function() {
+ var $handles, handleWidth;
+ $handles = this.$on.add(this.$off);
+ $handles.add(this.$label).css("width", "");
+ handleWidth = this.options.handleWidth === "auto" ? Math.max(this.$on.width(), this.$off.width()) : this.options.handleWidth;
+ $handles.width(handleWidth);
+ this.$label.width((function(_this) {
+ return function(index, width) {
+ if (_this.options.labelWidth !== "auto") {
+ return _this.options.labelWidth;
+ }
+ if (width < handleWidth) {
+ return handleWidth;
+ } else {
+ return width;
+ }
+ };
+ })(this));
+ this._handleWidth = this.$on.outerWidth();
+ this._labelWidth = this.$label.outerWidth();
+ this.$container.width((this._handleWidth * 2) + this._labelWidth);
+ return this.$wrapper.width(this._handleWidth + this._labelWidth);
+ };
+
+ BootstrapSwitch.prototype._containerPosition = function(state, callback) {
+ if (state == null) {
+ state = this.options.state;
+ }
+ this.$container.css("margin-left", (function(_this) {
+ return function() {
+ var values;
+ values = [0, "-" + _this._handleWidth + "px"];
+ if (_this.options.indeterminate) {
+ return "-" + (_this._handleWidth / 2) + "px";
+ }
+ if (state) {
+ if (_this.options.inverse) {
+ return values[1];
+ } else {
+ return values[0];
+ }
+ } else {
+ if (_this.options.inverse) {
+ return values[0];
+ } else {
+ return values[1];
+ }
+ }
+ };
+ })(this));
+ if (!callback) {
+ return;
+ }
+ return setTimeout(function() {
+ return callback();
+ }, 50);
+ };
+
+ BootstrapSwitch.prototype._init = function() {
+ var init, initInterval;
+ init = (function(_this) {
+ return function() {
+ _this._width();
+ return _this._containerPosition(null, function() {
+ if (_this.options.animate) {
+ return _this.$wrapper.addClass("" + _this.options.baseClass + "-animate");
+ }
+ });
+ };
+ })(this);
+ if (this.$wrapper.is(":visible")) {
+ return init();
+ }
+ return initInterval = window.setInterval((function(_this) {
+ return function() {
+ if (_this.$wrapper.is(":visible")) {
+ init();
+ return window.clearInterval(initInterval);
+ }
+ };
+ })(this), 50);
+ };
+
+ BootstrapSwitch.prototype._elementHandlers = function() {
+ return this.$element.on({
+ "change.bootstrapSwitch": (function(_this) {
+ return function(e, skip) {
+ var state;
+ e.preventDefault();
+ e.stopImmediatePropagation();
+ state = _this.$element.is(":checked");
+ _this._containerPosition(state);
+ if (state === _this.options.state) {
+ return;
+ }
+ _this.options.state = state;
+ _this.$wrapper.toggleClass("" + _this.options.baseClass + "-off").toggleClass("" + _this.options.baseClass + "-on");
+ if (!skip) {
+ if (_this.$element.is(":radio")) {
+ $("[name='" + (_this.$element.attr('name')) + "']").not(_this.$element).prop("checked", false).trigger("change.bootstrapSwitch", true);
+ }
+ return _this.$element.trigger("switchChange.bootstrapSwitch", [state]);
+ }
+ };
+ })(this),
+ "focus.bootstrapSwitch": (function(_this) {
+ return function(e) {
+ e.preventDefault();
+ return _this.$wrapper.addClass("" + _this.options.baseClass + "-focused");
+ };
+ })(this),
+ "blur.bootstrapSwitch": (function(_this) {
+ return function(e) {
+ e.preventDefault();
+ return _this.$wrapper.removeClass("" + _this.options.baseClass + "-focused");
+ };
+ })(this),
+ "keydown.bootstrapSwitch": (function(_this) {
+ return function(e) {
+ if (!e.which || _this.options.disabled || _this.options.readonly) {
+ return;
+ }
+ switch (e.which) {
+ case 37:
+ e.preventDefault();
+ e.stopImmediatePropagation();
+ return _this.state(false);
+ case 39:
+ e.preventDefault();
+ e.stopImmediatePropagation();
+ return _this.state(true);
+ }
+ };
+ })(this)
+ });
+ };
+
+ BootstrapSwitch.prototype._handleHandlers = function() {
+ this.$on.on("click.bootstrapSwitch", (function(_this) {
+ return function(event) {
+ event.preventDefault();
+ event.stopPropagation();
+ _this.state(false);
+ return _this.$element.trigger("focus.bootstrapSwitch");
+ };
+ })(this));
+ return this.$off.on("click.bootstrapSwitch", (function(_this) {
+ return function(event) {
+ event.preventDefault();
+ event.stopPropagation();
+ _this.state(true);
+ return _this.$element.trigger("focus.bootstrapSwitch");
+ };
+ })(this));
+ };
+
+ BootstrapSwitch.prototype._labelHandlers = function() {
+ return this.$label.on({
+ "mousedown.bootstrapSwitch touchstart.bootstrapSwitch": (function(_this) {
+ return function(e) {
+ if (_this._dragStart || _this.options.disabled || _this.options.readonly) {
+ return;
+ }
+ e.preventDefault();
+ e.stopPropagation();
+ _this._dragStart = (e.pageX || e.originalEvent.touches[0].pageX) - parseInt(_this.$container.css("margin-left"), 10);
+ if (_this.options.animate) {
+ _this.$wrapper.removeClass("" + _this.options.baseClass + "-animate");
+ }
+ return _this.$element.trigger("focus.bootstrapSwitch");
+ };
+ })(this),
+ "mousemove.bootstrapSwitch touchmove.bootstrapSwitch": (function(_this) {
+ return function(e) {
+ var difference;
+ if (_this._dragStart == null) {
+ return;
+ }
+ e.preventDefault();
+ difference = (e.pageX || e.originalEvent.touches[0].pageX) - _this._dragStart;
+ if (difference < -_this._handleWidth || difference > 0) {
+ return;
+ }
+ _this._dragEnd = difference;
+ return _this.$container.css("margin-left", "" + _this._dragEnd + "px");
+ };
+ })(this),
+ "mouseup.bootstrapSwitch touchend.bootstrapSwitch": (function(_this) {
+ return function(e) {
+ var state;
+ if (!_this._dragStart) {
+ return;
+ }
+ e.preventDefault();
+ if (_this.options.animate) {
+ _this.$wrapper.addClass("" + _this.options.baseClass + "-animate");
+ }
+ if (_this._dragEnd) {
+ state = _this._dragEnd > -(_this._handleWidth / 2);
+ _this._dragEnd = false;
+ _this.state(_this.options.inverse ? !state : state);
+ } else {
+ _this.state(!_this.options.state);
+ }
+ return _this._dragStart = false;
+ };
+ })(this),
+ "mouseleave.bootstrapSwitch": (function(_this) {
+ return function(e) {
+ return _this.$label.trigger("mouseup.bootstrapSwitch");
+ };
+ })(this)
+ });
+ };
+
+ BootstrapSwitch.prototype._externalLabelHandler = function() {
+ var $externalLabel;
+ $externalLabel = this.$element.closest("label");
+ return $externalLabel.on("click", (function(_this) {
+ return function(event) {
+ event.preventDefault();
+ event.stopImmediatePropagation();
+ if (event.target === $externalLabel[0]) {
+ return _this.toggleState();
+ }
+ };
+ })(this));
+ };
+
+ BootstrapSwitch.prototype._formHandler = function() {
+ var $form;
+ $form = this.$element.closest("form");
+ if ($form.data("bootstrap-switch")) {
+ return;
+ }
+ return $form.on("reset.bootstrapSwitch", function() {
+ return window.setTimeout(function() {
+ return $form.find("input").filter(function() {
+ return $(this).data("bootstrap-switch");
+ }).each(function() {
+ return $(this).bootstrapSwitch("state", this.checked);
+ });
+ }, 1);
+ }).data("bootstrap-switch", true);
+ };
+
+ BootstrapSwitch.prototype._getClasses = function(classes) {
+ var c, cls, _i, _len;
+ if (!$.isArray(classes)) {
+ return ["" + this.options.baseClass + "-" + classes];
+ }
+ cls = [];
+ for (_i = 0, _len = classes.length; _i < _len; _i++) {
+ c = classes[_i];
+ cls.push("" + this.options.baseClass + "-" + c);
+ }
+ return cls;
+ };
+
+ return BootstrapSwitch;
+
+ })();
+ $.fn.bootstrapSwitch = function() {
+ var args, option, ret;
+ option = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
+ ret = this;
+ this.each(function() {
+ var $this, data;
+ $this = $(this);
+ data = $this.data("bootstrap-switch");
+ if (!data) {
+ $this.data("bootstrap-switch", data = new BootstrapSwitch(this, option));
+ }
+ if (typeof option === "string") {
+ return ret = data[option].apply(data, args);
+ }
+ });
+ return ret;
+ };
+ $.fn.bootstrapSwitch.Constructor = BootstrapSwitch;
+ return $.fn.bootstrapSwitch.defaults = {
+ state: true,
+ size: null,
+ animate: true,
+ disabled: false,
+ readonly: false,
+ indeterminate: false,
+ inverse: false,
+ radioAllOff: false,
+ onColor: "primary",
+ offColor: "default",
+ onText: "ON",
+ offText: "OFF",
+ labelText: " ",
+ handleWidth: "auto",
+ labelWidth: "auto",
+ baseClass: "bootstrap-switch",
+ wrapperClass: "wrapper",
+ onInit: function() {},
+ onSwitchChange: function() {}
+ };
+ })(window.jQuery, window);
+
+}).call(this);
diff --git a/GitCandy.Web/Scripts/bootstrap.js b/GitCandy.Web/Scripts/bootstrap.js
new file mode 100644
index 0000000..8a2e99a
--- /dev/null
+++ b/GitCandy.Web/Scripts/bootstrap.js
@@ -0,0 +1,2377 @@
+/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under the MIT license
+ */
+
+if (typeof jQuery === 'undefined') {
+ throw new Error('Bootstrap\'s JavaScript requires jQuery')
+}
+
++function ($) {
+ 'use strict';
+ var version = $.fn.jquery.split(' ')[0].split('.')
+ if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {
+ throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')
+ }
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: transition.js v3.3.7
+ * http://getbootstrap.com/javascript/#transitions
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
+ // ============================================================
+
+ function transitionEnd() {
+ var el = document.createElement('bootstrap')
+
+ var transEndEventNames = {
+ WebkitTransition : 'webkitTransitionEnd',
+ MozTransition : 'transitionend',
+ OTransition : 'oTransitionEnd otransitionend',
+ transition : 'transitionend'
+ }
+
+ for (var name in transEndEventNames) {
+ if (el.style[name] !== undefined) {
+ return { end: transEndEventNames[name] }
+ }
+ }
+
+ return false // explicit for ie8 ( ._.)
+ }
+
+ // http://blog.alexmaccaw.com/css-transitions
+ $.fn.emulateTransitionEnd = function (duration) {
+ var called = false
+ var $el = this
+ $(this).one('bsTransitionEnd', function () { called = true })
+ var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
+ setTimeout(callback, duration)
+ return this
+ }
+
+ $(function () {
+ $.support.transition = transitionEnd()
+
+ if (!$.support.transition) return
+
+ $.event.special.bsTransitionEnd = {
+ bindType: $.support.transition.end,
+ delegateType: $.support.transition.end,
+ handle: function (e) {
+ if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
+ }
+ }
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: alert.js v3.3.7
+ * http://getbootstrap.com/javascript/#alerts
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // ALERT CLASS DEFINITION
+ // ======================
+
+ var dismiss = '[data-dismiss="alert"]'
+ var Alert = function (el) {
+ $(el).on('click', dismiss, this.close)
+ }
+
+ Alert.VERSION = '3.3.7'
+
+ Alert.TRANSITION_DURATION = 150
+
+ Alert.prototype.close = function (e) {
+ var $this = $(this)
+ var selector = $this.attr('data-target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+ }
+
+ var $parent = $(selector === '#' ? [] : selector)
+
+ if (e) e.preventDefault()
+
+ if (!$parent.length) {
+ $parent = $this.closest('.alert')
+ }
+
+ $parent.trigger(e = $.Event('close.bs.alert'))
+
+ if (e.isDefaultPrevented()) return
+
+ $parent.removeClass('in')
+
+ function removeElement() {
+ // detach from parent, fire event then clean up data
+ $parent.detach().trigger('closed.bs.alert').remove()
+ }
+
+ $.support.transition && $parent.hasClass('fade') ?
+ $parent
+ .one('bsTransitionEnd', removeElement)
+ .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
+ removeElement()
+ }
+
+
+ // ALERT PLUGIN DEFINITION
+ // =======================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.alert')
+
+ if (!data) $this.data('bs.alert', (data = new Alert(this)))
+ if (typeof option == 'string') data[option].call($this)
+ })
+ }
+
+ var old = $.fn.alert
+
+ $.fn.alert = Plugin
+ $.fn.alert.Constructor = Alert
+
+
+ // ALERT NO CONFLICT
+ // =================
+
+ $.fn.alert.noConflict = function () {
+ $.fn.alert = old
+ return this
+ }
+
+
+ // ALERT DATA-API
+ // ==============
+
+ $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: button.js v3.3.7
+ * http://getbootstrap.com/javascript/#buttons
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // BUTTON PUBLIC CLASS DEFINITION
+ // ==============================
+
+ var Button = function (element, options) {
+ this.$element = $(element)
+ this.options = $.extend({}, Button.DEFAULTS, options)
+ this.isLoading = false
+ }
+
+ Button.VERSION = '3.3.7'
+
+ Button.DEFAULTS = {
+ loadingText: 'loading...'
+ }
+
+ Button.prototype.setState = function (state) {
+ var d = 'disabled'
+ var $el = this.$element
+ var val = $el.is('input') ? 'val' : 'html'
+ var data = $el.data()
+
+ state += 'Text'
+
+ if (data.resetText == null) $el.data('resetText', $el[val]())
+
+ // push to event loop to allow forms to submit
+ setTimeout($.proxy(function () {
+ $el[val](data[state] == null ? this.options[state] : data[state])
+
+ if (state == 'loadingText') {
+ this.isLoading = true
+ $el.addClass(d).attr(d, d).prop(d, true)
+ } else if (this.isLoading) {
+ this.isLoading = false
+ $el.removeClass(d).removeAttr(d).prop(d, false)
+ }
+ }, this), 0)
+ }
+
+ Button.prototype.toggle = function () {
+ var changed = true
+ var $parent = this.$element.closest('[data-toggle="buttons"]')
+
+ if ($parent.length) {
+ var $input = this.$element.find('input')
+ if ($input.prop('type') == 'radio') {
+ if ($input.prop('checked')) changed = false
+ $parent.find('.active').removeClass('active')
+ this.$element.addClass('active')
+ } else if ($input.prop('type') == 'checkbox') {
+ if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false
+ this.$element.toggleClass('active')
+ }
+ $input.prop('checked', this.$element.hasClass('active'))
+ if (changed) $input.trigger('change')
+ } else {
+ this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
+ this.$element.toggleClass('active')
+ }
+ }
+
+
+ // BUTTON PLUGIN DEFINITION
+ // ========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.button')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.button', (data = new Button(this, options)))
+
+ if (option == 'toggle') data.toggle()
+ else if (option) data.setState(option)
+ })
+ }
+
+ var old = $.fn.button
+
+ $.fn.button = Plugin
+ $.fn.button.Constructor = Button
+
+
+ // BUTTON NO CONFLICT
+ // ==================
+
+ $.fn.button.noConflict = function () {
+ $.fn.button = old
+ return this
+ }
+
+
+ // BUTTON DATA-API
+ // ===============
+
+ $(document)
+ .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
+ var $btn = $(e.target).closest('.btn')
+ Plugin.call($btn, 'toggle')
+ if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
+ // Prevent double click on radios, and the double selections (so cancellation) on checkboxes
+ e.preventDefault()
+ // The target component still receive the focus
+ if ($btn.is('input,button')) $btn.trigger('focus')
+ else $btn.find('input:visible,button:visible').first().trigger('focus')
+ }
+ })
+ .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
+ $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: carousel.js v3.3.7
+ * http://getbootstrap.com/javascript/#carousel
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // CAROUSEL CLASS DEFINITION
+ // =========================
+
+ var Carousel = function (element, options) {
+ this.$element = $(element)
+ this.$indicators = this.$element.find('.carousel-indicators')
+ this.options = options
+ this.paused = null
+ this.sliding = null
+ this.interval = null
+ this.$active = null
+ this.$items = null
+
+ this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
+
+ this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
+ .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
+ .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
+ }
+
+ Carousel.VERSION = '3.3.7'
+
+ Carousel.TRANSITION_DURATION = 600
+
+ Carousel.DEFAULTS = {
+ interval: 5000,
+ pause: 'hover',
+ wrap: true,
+ keyboard: true
+ }
+
+ Carousel.prototype.keydown = function (e) {
+ if (/input|textarea/i.test(e.target.tagName)) return
+ switch (e.which) {
+ case 37: this.prev(); break
+ case 39: this.next(); break
+ default: return
+ }
+
+ e.preventDefault()
+ }
+
+ Carousel.prototype.cycle = function (e) {
+ e || (this.paused = false)
+
+ this.interval && clearInterval(this.interval)
+
+ this.options.interval
+ && !this.paused
+ && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
+
+ return this
+ }
+
+ Carousel.prototype.getItemIndex = function (item) {
+ this.$items = item.parent().children('.item')
+ return this.$items.index(item || this.$active)
+ }
+
+ Carousel.prototype.getItemForDirection = function (direction, active) {
+ var activeIndex = this.getItemIndex(active)
+ var willWrap = (direction == 'prev' && activeIndex === 0)
+ || (direction == 'next' && activeIndex == (this.$items.length - 1))
+ if (willWrap && !this.options.wrap) return active
+ var delta = direction == 'prev' ? -1 : 1
+ var itemIndex = (activeIndex + delta) % this.$items.length
+ return this.$items.eq(itemIndex)
+ }
+
+ Carousel.prototype.to = function (pos) {
+ var that = this
+ var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
+
+ if (pos > (this.$items.length - 1) || pos < 0) return
+
+ if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
+ if (activeIndex == pos) return this.pause().cycle()
+
+ return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
+ }
+
+ Carousel.prototype.pause = function (e) {
+ e || (this.paused = true)
+
+ if (this.$element.find('.next, .prev').length && $.support.transition) {
+ this.$element.trigger($.support.transition.end)
+ this.cycle(true)
+ }
+
+ this.interval = clearInterval(this.interval)
+
+ return this
+ }
+
+ Carousel.prototype.next = function () {
+ if (this.sliding) return
+ return this.slide('next')
+ }
+
+ Carousel.prototype.prev = function () {
+ if (this.sliding) return
+ return this.slide('prev')
+ }
+
+ Carousel.prototype.slide = function (type, next) {
+ var $active = this.$element.find('.item.active')
+ var $next = next || this.getItemForDirection(type, $active)
+ var isCycling = this.interval
+ var direction = type == 'next' ? 'left' : 'right'
+ var that = this
+
+ if ($next.hasClass('active')) return (this.sliding = false)
+
+ var relatedTarget = $next[0]
+ var slideEvent = $.Event('slide.bs.carousel', {
+ relatedTarget: relatedTarget,
+ direction: direction
+ })
+ this.$element.trigger(slideEvent)
+ if (slideEvent.isDefaultPrevented()) return
+
+ this.sliding = true
+
+ isCycling && this.pause()
+
+ if (this.$indicators.length) {
+ this.$indicators.find('.active').removeClass('active')
+ var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
+ $nextIndicator && $nextIndicator.addClass('active')
+ }
+
+ var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
+ if ($.support.transition && this.$element.hasClass('slide')) {
+ $next.addClass(type)
+ $next[0].offsetWidth // force reflow
+ $active.addClass(direction)
+ $next.addClass(direction)
+ $active
+ .one('bsTransitionEnd', function () {
+ $next.removeClass([type, direction].join(' ')).addClass('active')
+ $active.removeClass(['active', direction].join(' '))
+ that.sliding = false
+ setTimeout(function () {
+ that.$element.trigger(slidEvent)
+ }, 0)
+ })
+ .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
+ } else {
+ $active.removeClass('active')
+ $next.addClass('active')
+ this.sliding = false
+ this.$element.trigger(slidEvent)
+ }
+
+ isCycling && this.cycle()
+
+ return this
+ }
+
+
+ // CAROUSEL PLUGIN DEFINITION
+ // ==========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.carousel')
+ var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
+ var action = typeof option == 'string' ? option : options.slide
+
+ if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
+ if (typeof option == 'number') data.to(option)
+ else if (action) data[action]()
+ else if (options.interval) data.pause().cycle()
+ })
+ }
+
+ var old = $.fn.carousel
+
+ $.fn.carousel = Plugin
+ $.fn.carousel.Constructor = Carousel
+
+
+ // CAROUSEL NO CONFLICT
+ // ====================
+
+ $.fn.carousel.noConflict = function () {
+ $.fn.carousel = old
+ return this
+ }
+
+
+ // CAROUSEL DATA-API
+ // =================
+
+ var clickHandler = function (e) {
+ var href
+ var $this = $(this)
+ var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
+ if (!$target.hasClass('carousel')) return
+ var options = $.extend({}, $target.data(), $this.data())
+ var slideIndex = $this.attr('data-slide-to')
+ if (slideIndex) options.interval = false
+
+ Plugin.call($target, options)
+
+ if (slideIndex) {
+ $target.data('bs.carousel').to(slideIndex)
+ }
+
+ e.preventDefault()
+ }
+
+ $(document)
+ .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
+ .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
+
+ $(window).on('load', function () {
+ $('[data-ride="carousel"]').each(function () {
+ var $carousel = $(this)
+ Plugin.call($carousel, $carousel.data())
+ })
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: collapse.js v3.3.7
+ * http://getbootstrap.com/javascript/#collapse
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+/* jshint latedef: false */
+
++function ($) {
+ 'use strict';
+
+ // COLLAPSE PUBLIC CLASS DEFINITION
+ // ================================
+
+ var Collapse = function (element, options) {
+ this.$element = $(element)
+ this.options = $.extend({}, Collapse.DEFAULTS, options)
+ this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
+ '[data-toggle="collapse"][data-target="#' + element.id + '"]')
+ this.transitioning = null
+
+ if (this.options.parent) {
+ this.$parent = this.getParent()
+ } else {
+ this.addAriaAndCollapsedClass(this.$element, this.$trigger)
+ }
+
+ if (this.options.toggle) this.toggle()
+ }
+
+ Collapse.VERSION = '3.3.7'
+
+ Collapse.TRANSITION_DURATION = 350
+
+ Collapse.DEFAULTS = {
+ toggle: true
+ }
+
+ Collapse.prototype.dimension = function () {
+ var hasWidth = this.$element.hasClass('width')
+ return hasWidth ? 'width' : 'height'
+ }
+
+ Collapse.prototype.show = function () {
+ if (this.transitioning || this.$element.hasClass('in')) return
+
+ var activesData
+ var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
+
+ if (actives && actives.length) {
+ activesData = actives.data('bs.collapse')
+ if (activesData && activesData.transitioning) return
+ }
+
+ var startEvent = $.Event('show.bs.collapse')
+ this.$element.trigger(startEvent)
+ if (startEvent.isDefaultPrevented()) return
+
+ if (actives && actives.length) {
+ Plugin.call(actives, 'hide')
+ activesData || actives.data('bs.collapse', null)
+ }
+
+ var dimension = this.dimension()
+
+ this.$element
+ .removeClass('collapse')
+ .addClass('collapsing')[dimension](0)
+ .attr('aria-expanded', true)
+
+ this.$trigger
+ .removeClass('collapsed')
+ .attr('aria-expanded', true)
+
+ this.transitioning = 1
+
+ var complete = function () {
+ this.$element
+ .removeClass('collapsing')
+ .addClass('collapse in')[dimension]('')
+ this.transitioning = 0
+ this.$element
+ .trigger('shown.bs.collapse')
+ }
+
+ if (!$.support.transition) return complete.call(this)
+
+ var scrollSize = $.camelCase(['scroll', dimension].join('-'))
+
+ this.$element
+ .one('bsTransitionEnd', $.proxy(complete, this))
+ .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
+ }
+
+ Collapse.prototype.hide = function () {
+ if (this.transitioning || !this.$element.hasClass('in')) return
+
+ var startEvent = $.Event('hide.bs.collapse')
+ this.$element.trigger(startEvent)
+ if (startEvent.isDefaultPrevented()) return
+
+ var dimension = this.dimension()
+
+ this.$element[dimension](this.$element[dimension]())[0].offsetHeight
+
+ this.$element
+ .addClass('collapsing')
+ .removeClass('collapse in')
+ .attr('aria-expanded', false)
+
+ this.$trigger
+ .addClass('collapsed')
+ .attr('aria-expanded', false)
+
+ this.transitioning = 1
+
+ var complete = function () {
+ this.transitioning = 0
+ this.$element
+ .removeClass('collapsing')
+ .addClass('collapse')
+ .trigger('hidden.bs.collapse')
+ }
+
+ if (!$.support.transition) return complete.call(this)
+
+ this.$element
+ [dimension](0)
+ .one('bsTransitionEnd', $.proxy(complete, this))
+ .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
+ }
+
+ Collapse.prototype.toggle = function () {
+ this[this.$element.hasClass('in') ? 'hide' : 'show']()
+ }
+
+ Collapse.prototype.getParent = function () {
+ return $(this.options.parent)
+ .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
+ .each($.proxy(function (i, element) {
+ var $element = $(element)
+ this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
+ }, this))
+ .end()
+ }
+
+ Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
+ var isOpen = $element.hasClass('in')
+
+ $element.attr('aria-expanded', isOpen)
+ $trigger
+ .toggleClass('collapsed', !isOpen)
+ .attr('aria-expanded', isOpen)
+ }
+
+ function getTargetFromTrigger($trigger) {
+ var href
+ var target = $trigger.attr('data-target')
+ || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
+
+ return $(target)
+ }
+
+
+ // COLLAPSE PLUGIN DEFINITION
+ // ==========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.collapse')
+ var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
+
+ if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
+ if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.collapse
+
+ $.fn.collapse = Plugin
+ $.fn.collapse.Constructor = Collapse
+
+
+ // COLLAPSE NO CONFLICT
+ // ====================
+
+ $.fn.collapse.noConflict = function () {
+ $.fn.collapse = old
+ return this
+ }
+
+
+ // COLLAPSE DATA-API
+ // =================
+
+ $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
+ var $this = $(this)
+
+ if (!$this.attr('data-target')) e.preventDefault()
+
+ var $target = getTargetFromTrigger($this)
+ var data = $target.data('bs.collapse')
+ var option = data ? 'toggle' : $this.data()
+
+ Plugin.call($target, option)
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: dropdown.js v3.3.7
+ * http://getbootstrap.com/javascript/#dropdowns
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // DROPDOWN CLASS DEFINITION
+ // =========================
+
+ var backdrop = '.dropdown-backdrop'
+ var toggle = '[data-toggle="dropdown"]'
+ var Dropdown = function (element) {
+ $(element).on('click.bs.dropdown', this.toggle)
+ }
+
+ Dropdown.VERSION = '3.3.7'
+
+ function getParent($this) {
+ var selector = $this.attr('data-target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+ }
+
+ var $parent = selector && $(selector)
+
+ return $parent && $parent.length ? $parent : $this.parent()
+ }
+
+ function clearMenus(e) {
+ if (e && e.which === 3) return
+ $(backdrop).remove()
+ $(toggle).each(function () {
+ var $this = $(this)
+ var $parent = getParent($this)
+ var relatedTarget = { relatedTarget: this }
+
+ if (!$parent.hasClass('open')) return
+
+ if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
+
+ $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
+
+ if (e.isDefaultPrevented()) return
+
+ $this.attr('aria-expanded', 'false')
+ $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))
+ })
+ }
+
+ Dropdown.prototype.toggle = function (e) {
+ var $this = $(this)
+
+ if ($this.is('.disabled, :disabled')) return
+
+ var $parent = getParent($this)
+ var isActive = $parent.hasClass('open')
+
+ clearMenus()
+
+ if (!isActive) {
+ if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
+ // if mobile we use a backdrop because click events don't delegate
+ $(document.createElement('div'))
+ .addClass('dropdown-backdrop')
+ .insertAfter($(this))
+ .on('click', clearMenus)
+ }
+
+ var relatedTarget = { relatedTarget: this }
+ $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
+
+ if (e.isDefaultPrevented()) return
+
+ $this
+ .trigger('focus')
+ .attr('aria-expanded', 'true')
+
+ $parent
+ .toggleClass('open')
+ .trigger($.Event('shown.bs.dropdown', relatedTarget))
+ }
+
+ return false
+ }
+
+ Dropdown.prototype.keydown = function (e) {
+ if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
+
+ var $this = $(this)
+
+ e.preventDefault()
+ e.stopPropagation()
+
+ if ($this.is('.disabled, :disabled')) return
+
+ var $parent = getParent($this)
+ var isActive = $parent.hasClass('open')
+
+ if (!isActive && e.which != 27 || isActive && e.which == 27) {
+ if (e.which == 27) $parent.find(toggle).trigger('focus')
+ return $this.trigger('click')
+ }
+
+ var desc = ' li:not(.disabled):visible a'
+ var $items = $parent.find('.dropdown-menu' + desc)
+
+ if (!$items.length) return
+
+ var index = $items.index(e.target)
+
+ if (e.which == 38 && index > 0) index-- // up
+ if (e.which == 40 && index < $items.length - 1) index++ // down
+ if (!~index) index = 0
+
+ $items.eq(index).trigger('focus')
+ }
+
+
+ // DROPDOWN PLUGIN DEFINITION
+ // ==========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.dropdown')
+
+ if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
+ if (typeof option == 'string') data[option].call($this)
+ })
+ }
+
+ var old = $.fn.dropdown
+
+ $.fn.dropdown = Plugin
+ $.fn.dropdown.Constructor = Dropdown
+
+
+ // DROPDOWN NO CONFLICT
+ // ====================
+
+ $.fn.dropdown.noConflict = function () {
+ $.fn.dropdown = old
+ return this
+ }
+
+
+ // APPLY TO STANDARD DROPDOWN ELEMENTS
+ // ===================================
+
+ $(document)
+ .on('click.bs.dropdown.data-api', clearMenus)
+ .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
+ .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
+ .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
+ .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: modal.js v3.3.7
+ * http://getbootstrap.com/javascript/#modals
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // MODAL CLASS DEFINITION
+ // ======================
+
+ var Modal = function (element, options) {
+ this.options = options
+ this.$body = $(document.body)
+ this.$element = $(element)
+ this.$dialog = this.$element.find('.modal-dialog')
+ this.$backdrop = null
+ this.isShown = null
+ this.originalBodyPad = null
+ this.scrollbarWidth = 0
+ this.ignoreBackdropClick = false
+
+ if (this.options.remote) {
+ this.$element
+ .find('.modal-content')
+ .load(this.options.remote, $.proxy(function () {
+ this.$element.trigger('loaded.bs.modal')
+ }, this))
+ }
+ }
+
+ Modal.VERSION = '3.3.7'
+
+ Modal.TRANSITION_DURATION = 300
+ Modal.BACKDROP_TRANSITION_DURATION = 150
+
+ Modal.DEFAULTS = {
+ backdrop: true,
+ keyboard: true,
+ show: true
+ }
+
+ Modal.prototype.toggle = function (_relatedTarget) {
+ return this.isShown ? this.hide() : this.show(_relatedTarget)
+ }
+
+ Modal.prototype.show = function (_relatedTarget) {
+ var that = this
+ var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
+
+ this.$element.trigger(e)
+
+ if (this.isShown || e.isDefaultPrevented()) return
+
+ this.isShown = true
+
+ this.checkScrollbar()
+ this.setScrollbar()
+ this.$body.addClass('modal-open')
+
+ this.escape()
+ this.resize()
+
+ this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
+
+ this.$dialog.on('mousedown.dismiss.bs.modal', function () {
+ that.$element.one('mouseup.dismiss.bs.modal', function (e) {
+ if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
+ })
+ })
+
+ this.backdrop(function () {
+ var transition = $.support.transition && that.$element.hasClass('fade')
+
+ if (!that.$element.parent().length) {
+ that.$element.appendTo(that.$body) // don't move modals dom position
+ }
+
+ that.$element
+ .show()
+ .scrollTop(0)
+
+ that.adjustDialog()
+
+ if (transition) {
+ that.$element[0].offsetWidth // force reflow
+ }
+
+ that.$element.addClass('in')
+
+ that.enforceFocus()
+
+ var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
+
+ transition ?
+ that.$dialog // wait for modal to slide in
+ .one('bsTransitionEnd', function () {
+ that.$element.trigger('focus').trigger(e)
+ })
+ .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
+ that.$element.trigger('focus').trigger(e)
+ })
+ }
+
+ Modal.prototype.hide = function (e) {
+ if (e) e.preventDefault()
+
+ e = $.Event('hide.bs.modal')
+
+ this.$element.trigger(e)
+
+ if (!this.isShown || e.isDefaultPrevented()) return
+
+ this.isShown = false
+
+ this.escape()
+ this.resize()
+
+ $(document).off('focusin.bs.modal')
+
+ this.$element
+ .removeClass('in')
+ .off('click.dismiss.bs.modal')
+ .off('mouseup.dismiss.bs.modal')
+
+ this.$dialog.off('mousedown.dismiss.bs.modal')
+
+ $.support.transition && this.$element.hasClass('fade') ?
+ this.$element
+ .one('bsTransitionEnd', $.proxy(this.hideModal, this))
+ .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
+ this.hideModal()
+ }
+
+ Modal.prototype.enforceFocus = function () {
+ $(document)
+ .off('focusin.bs.modal') // guard against infinite focus loop
+ .on('focusin.bs.modal', $.proxy(function (e) {
+ if (document !== e.target &&
+ this.$element[0] !== e.target &&
+ !this.$element.has(e.target).length) {
+ this.$element.trigger('focus')
+ }
+ }, this))
+ }
+
+ Modal.prototype.escape = function () {
+ if (this.isShown && this.options.keyboard) {
+ this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
+ e.which == 27 && this.hide()
+ }, this))
+ } else if (!this.isShown) {
+ this.$element.off('keydown.dismiss.bs.modal')
+ }
+ }
+
+ Modal.prototype.resize = function () {
+ if (this.isShown) {
+ $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
+ } else {
+ $(window).off('resize.bs.modal')
+ }
+ }
+
+ Modal.prototype.hideModal = function () {
+ var that = this
+ this.$element.hide()
+ this.backdrop(function () {
+ that.$body.removeClass('modal-open')
+ that.resetAdjustments()
+ that.resetScrollbar()
+ that.$element.trigger('hidden.bs.modal')
+ })
+ }
+
+ Modal.prototype.removeBackdrop = function () {
+ this.$backdrop && this.$backdrop.remove()
+ this.$backdrop = null
+ }
+
+ Modal.prototype.backdrop = function (callback) {
+ var that = this
+ var animate = this.$element.hasClass('fade') ? 'fade' : ''
+
+ if (this.isShown && this.options.backdrop) {
+ var doAnimate = $.support.transition && animate
+
+ this.$backdrop = $(document.createElement('div'))
+ .addClass('modal-backdrop ' + animate)
+ .appendTo(this.$body)
+
+ this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
+ if (this.ignoreBackdropClick) {
+ this.ignoreBackdropClick = false
+ return
+ }
+ if (e.target !== e.currentTarget) return
+ this.options.backdrop == 'static'
+ ? this.$element[0].focus()
+ : this.hide()
+ }, this))
+
+ if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
+
+ this.$backdrop.addClass('in')
+
+ if (!callback) return
+
+ doAnimate ?
+ this.$backdrop
+ .one('bsTransitionEnd', callback)
+ .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
+ callback()
+
+ } else if (!this.isShown && this.$backdrop) {
+ this.$backdrop.removeClass('in')
+
+ var callbackRemove = function () {
+ that.removeBackdrop()
+ callback && callback()
+ }
+ $.support.transition && this.$element.hasClass('fade') ?
+ this.$backdrop
+ .one('bsTransitionEnd', callbackRemove)
+ .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
+ callbackRemove()
+
+ } else if (callback) {
+ callback()
+ }
+ }
+
+ // these following methods are used to handle overflowing modals
+
+ Modal.prototype.handleUpdate = function () {
+ this.adjustDialog()
+ }
+
+ Modal.prototype.adjustDialog = function () {
+ var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
+
+ this.$element.css({
+ paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
+ paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
+ })
+ }
+
+ Modal.prototype.resetAdjustments = function () {
+ this.$element.css({
+ paddingLeft: '',
+ paddingRight: ''
+ })
+ }
+
+ Modal.prototype.checkScrollbar = function () {
+ var fullWindowWidth = window.innerWidth
+ if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
+ var documentElementRect = document.documentElement.getBoundingClientRect()
+ fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
+ }
+ this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
+ this.scrollbarWidth = this.measureScrollbar()
+ }
+
+ Modal.prototype.setScrollbar = function () {
+ var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
+ this.originalBodyPad = document.body.style.paddingRight || ''
+ if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
+ }
+
+ Modal.prototype.resetScrollbar = function () {
+ this.$body.css('padding-right', this.originalBodyPad)
+ }
+
+ Modal.prototype.measureScrollbar = function () { // thx walsh
+ var scrollDiv = document.createElement('div')
+ scrollDiv.className = 'modal-scrollbar-measure'
+ this.$body.append(scrollDiv)
+ var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
+ this.$body[0].removeChild(scrollDiv)
+ return scrollbarWidth
+ }
+
+
+ // MODAL PLUGIN DEFINITION
+ // =======================
+
+ function Plugin(option, _relatedTarget) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.modal')
+ var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
+
+ if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
+ if (typeof option == 'string') data[option](_relatedTarget)
+ else if (options.show) data.show(_relatedTarget)
+ })
+ }
+
+ var old = $.fn.modal
+
+ $.fn.modal = Plugin
+ $.fn.modal.Constructor = Modal
+
+
+ // MODAL NO CONFLICT
+ // =================
+
+ $.fn.modal.noConflict = function () {
+ $.fn.modal = old
+ return this
+ }
+
+
+ // MODAL DATA-API
+ // ==============
+
+ $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
+ var $this = $(this)
+ var href = $this.attr('href')
+ var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
+ var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
+
+ if ($this.is('a')) e.preventDefault()
+
+ $target.one('show.bs.modal', function (showEvent) {
+ if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
+ $target.one('hidden.bs.modal', function () {
+ $this.is(':visible') && $this.trigger('focus')
+ })
+ })
+ Plugin.call($target, option, this)
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: tooltip.js v3.3.7
+ * http://getbootstrap.com/javascript/#tooltip
+ * Inspired by the original jQuery.tipsy by Jason Frame
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // TOOLTIP PUBLIC CLASS DEFINITION
+ // ===============================
+
+ var Tooltip = function (element, options) {
+ this.type = null
+ this.options = null
+ this.enabled = null
+ this.timeout = null
+ this.hoverState = null
+ this.$element = null
+ this.inState = null
+
+ this.init('tooltip', element, options)
+ }
+
+ Tooltip.VERSION = '3.3.7'
+
+ Tooltip.TRANSITION_DURATION = 150
+
+ Tooltip.DEFAULTS = {
+ animation: true,
+ placement: 'top',
+ selector: false,
+ template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
+ trigger: 'hover focus',
+ title: '',
+ delay: 0,
+ html: false,
+ container: false,
+ viewport: {
+ selector: 'body',
+ padding: 0
+ }
+ }
+
+ Tooltip.prototype.init = function (type, element, options) {
+ this.enabled = true
+ this.type = type
+ this.$element = $(element)
+ this.options = this.getOptions(options)
+ this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
+ this.inState = { click: false, hover: false, focus: false }
+
+ if (this.$element[0] instanceof document.constructor && !this.options.selector) {
+ throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
+ }
+
+ var triggers = this.options.trigger.split(' ')
+
+ for (var i = triggers.length; i--;) {
+ var trigger = triggers[i]
+
+ if (trigger == 'click') {
+ this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
+ } else if (trigger != 'manual') {
+ var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
+ var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
+
+ this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
+ this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
+ }
+ }
+
+ this.options.selector ?
+ (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
+ this.fixTitle()
+ }
+
+ Tooltip.prototype.getDefaults = function () {
+ return Tooltip.DEFAULTS
+ }
+
+ Tooltip.prototype.getOptions = function (options) {
+ options = $.extend({}, this.getDefaults(), this.$element.data(), options)
+
+ if (options.delay && typeof options.delay == 'number') {
+ options.delay = {
+ show: options.delay,
+ hide: options.delay
+ }
+ }
+
+ return options
+ }
+
+ Tooltip.prototype.getDelegateOptions = function () {
+ var options = {}
+ var defaults = this.getDefaults()
+
+ this._options && $.each(this._options, function (key, value) {
+ if (defaults[key] != value) options[key] = value
+ })
+
+ return options
+ }
+
+ Tooltip.prototype.enter = function (obj) {
+ var self = obj instanceof this.constructor ?
+ obj : $(obj.currentTarget).data('bs.' + this.type)
+
+ if (!self) {
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
+ $(obj.currentTarget).data('bs.' + this.type, self)
+ }
+
+ if (obj instanceof $.Event) {
+ self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
+ }
+
+ if (self.tip().hasClass('in') || self.hoverState == 'in') {
+ self.hoverState = 'in'
+ return
+ }
+
+ clearTimeout(self.timeout)
+
+ self.hoverState = 'in'
+
+ if (!self.options.delay || !self.options.delay.show) return self.show()
+
+ self.timeout = setTimeout(function () {
+ if (self.hoverState == 'in') self.show()
+ }, self.options.delay.show)
+ }
+
+ Tooltip.prototype.isInStateTrue = function () {
+ for (var key in this.inState) {
+ if (this.inState[key]) return true
+ }
+
+ return false
+ }
+
+ Tooltip.prototype.leave = function (obj) {
+ var self = obj instanceof this.constructor ?
+ obj : $(obj.currentTarget).data('bs.' + this.type)
+
+ if (!self) {
+ self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
+ $(obj.currentTarget).data('bs.' + this.type, self)
+ }
+
+ if (obj instanceof $.Event) {
+ self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
+ }
+
+ if (self.isInStateTrue()) return
+
+ clearTimeout(self.timeout)
+
+ self.hoverState = 'out'
+
+ if (!self.options.delay || !self.options.delay.hide) return self.hide()
+
+ self.timeout = setTimeout(function () {
+ if (self.hoverState == 'out') self.hide()
+ }, self.options.delay.hide)
+ }
+
+ Tooltip.prototype.show = function () {
+ var e = $.Event('show.bs.' + this.type)
+
+ if (this.hasContent() && this.enabled) {
+ this.$element.trigger(e)
+
+ var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
+ if (e.isDefaultPrevented() || !inDom) return
+ var that = this
+
+ var $tip = this.tip()
+
+ var tipId = this.getUID(this.type)
+
+ this.setContent()
+ $tip.attr('id', tipId)
+ this.$element.attr('aria-describedby', tipId)
+
+ if (this.options.animation) $tip.addClass('fade')
+
+ var placement = typeof this.options.placement == 'function' ?
+ this.options.placement.call(this, $tip[0], this.$element[0]) :
+ this.options.placement
+
+ var autoToken = /\s?auto?\s?/i
+ var autoPlace = autoToken.test(placement)
+ if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
+
+ $tip
+ .detach()
+ .css({ top: 0, left: 0, display: 'block' })
+ .addClass(placement)
+ .data('bs.' + this.type, this)
+
+ this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
+ this.$element.trigger('inserted.bs.' + this.type)
+
+ var pos = this.getPosition()
+ var actualWidth = $tip[0].offsetWidth
+ var actualHeight = $tip[0].offsetHeight
+
+ if (autoPlace) {
+ var orgPlacement = placement
+ var viewportDim = this.getPosition(this.$viewport)
+
+ placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :
+ placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :
+ placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :
+ placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :
+ placement
+
+ $tip
+ .removeClass(orgPlacement)
+ .addClass(placement)
+ }
+
+ var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
+
+ this.applyPlacement(calculatedOffset, placement)
+
+ var complete = function () {
+ var prevHoverState = that.hoverState
+ that.$element.trigger('shown.bs.' + that.type)
+ that.hoverState = null
+
+ if (prevHoverState == 'out') that.leave(that)
+ }
+
+ $.support.transition && this.$tip.hasClass('fade') ?
+ $tip
+ .one('bsTransitionEnd', complete)
+ .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
+ complete()
+ }
+ }
+
+ Tooltip.prototype.applyPlacement = function (offset, placement) {
+ var $tip = this.tip()
+ var width = $tip[0].offsetWidth
+ var height = $tip[0].offsetHeight
+
+ // manually read margins because getBoundingClientRect includes difference
+ var marginTop = parseInt($tip.css('margin-top'), 10)
+ var marginLeft = parseInt($tip.css('margin-left'), 10)
+
+ // we must check for NaN for ie 8/9
+ if (isNaN(marginTop)) marginTop = 0
+ if (isNaN(marginLeft)) marginLeft = 0
+
+ offset.top += marginTop
+ offset.left += marginLeft
+
+ // $.fn.offset doesn't round pixel values
+ // so we use setOffset directly with our own function B-0
+ $.offset.setOffset($tip[0], $.extend({
+ using: function (props) {
+ $tip.css({
+ top: Math.round(props.top),
+ left: Math.round(props.left)
+ })
+ }
+ }, offset), 0)
+
+ $tip.addClass('in')
+
+ // check to see if placing tip in new offset caused the tip to resize itself
+ var actualWidth = $tip[0].offsetWidth
+ var actualHeight = $tip[0].offsetHeight
+
+ if (placement == 'top' && actualHeight != height) {
+ offset.top = offset.top + height - actualHeight
+ }
+
+ var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
+
+ if (delta.left) offset.left += delta.left
+ else offset.top += delta.top
+
+ var isVertical = /top|bottom/.test(placement)
+ var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
+ var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
+
+ $tip.offset(offset)
+ this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
+ }
+
+ Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
+ this.arrow()
+ .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
+ .css(isVertical ? 'top' : 'left', '')
+ }
+
+ Tooltip.prototype.setContent = function () {
+ var $tip = this.tip()
+ var title = this.getTitle()
+
+ $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
+ $tip.removeClass('fade in top bottom left right')
+ }
+
+ Tooltip.prototype.hide = function (callback) {
+ var that = this
+ var $tip = $(this.$tip)
+ var e = $.Event('hide.bs.' + this.type)
+
+ function complete() {
+ if (that.hoverState != 'in') $tip.detach()
+ if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.
+ that.$element
+ .removeAttr('aria-describedby')
+ .trigger('hidden.bs.' + that.type)
+ }
+ callback && callback()
+ }
+
+ this.$element.trigger(e)
+
+ if (e.isDefaultPrevented()) return
+
+ $tip.removeClass('in')
+
+ $.support.transition && $tip.hasClass('fade') ?
+ $tip
+ .one('bsTransitionEnd', complete)
+ .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
+ complete()
+
+ this.hoverState = null
+
+ return this
+ }
+
+ Tooltip.prototype.fixTitle = function () {
+ var $e = this.$element
+ if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {
+ $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
+ }
+ }
+
+ Tooltip.prototype.hasContent = function () {
+ return this.getTitle()
+ }
+
+ Tooltip.prototype.getPosition = function ($element) {
+ $element = $element || this.$element
+
+ var el = $element[0]
+ var isBody = el.tagName == 'BODY'
+
+ var elRect = el.getBoundingClientRect()
+ if (elRect.width == null) {
+ // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
+ elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
+ }
+ var isSvg = window.SVGElement && el instanceof window.SVGElement
+ // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.
+ // See https://github.com/twbs/bootstrap/issues/20280
+ var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())
+ var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
+ var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
+
+ return $.extend({}, elRect, scroll, outerDims, elOffset)
+ }
+
+ Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
+ return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
+ placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
+ placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
+ /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
+
+ }
+
+ Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
+ var delta = { top: 0, left: 0 }
+ if (!this.$viewport) return delta
+
+ var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
+ var viewportDimensions = this.getPosition(this.$viewport)
+
+ if (/right|left/.test(placement)) {
+ var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
+ var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
+ if (topEdgeOffset < viewportDimensions.top) { // top overflow
+ delta.top = viewportDimensions.top - topEdgeOffset
+ } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
+ delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
+ }
+ } else {
+ var leftEdgeOffset = pos.left - viewportPadding
+ var rightEdgeOffset = pos.left + viewportPadding + actualWidth
+ if (leftEdgeOffset < viewportDimensions.left) { // left overflow
+ delta.left = viewportDimensions.left - leftEdgeOffset
+ } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
+ delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
+ }
+ }
+
+ return delta
+ }
+
+ Tooltip.prototype.getTitle = function () {
+ var title
+ var $e = this.$element
+ var o = this.options
+
+ title = $e.attr('data-original-title')
+ || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
+
+ return title
+ }
+
+ Tooltip.prototype.getUID = function (prefix) {
+ do prefix += ~~(Math.random() * 1000000)
+ while (document.getElementById(prefix))
+ return prefix
+ }
+
+ Tooltip.prototype.tip = function () {
+ if (!this.$tip) {
+ this.$tip = $(this.options.template)
+ if (this.$tip.length != 1) {
+ throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')
+ }
+ }
+ return this.$tip
+ }
+
+ Tooltip.prototype.arrow = function () {
+ return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
+ }
+
+ Tooltip.prototype.enable = function () {
+ this.enabled = true
+ }
+
+ Tooltip.prototype.disable = function () {
+ this.enabled = false
+ }
+
+ Tooltip.prototype.toggleEnabled = function () {
+ this.enabled = !this.enabled
+ }
+
+ Tooltip.prototype.toggle = function (e) {
+ var self = this
+ if (e) {
+ self = $(e.currentTarget).data('bs.' + this.type)
+ if (!self) {
+ self = new this.constructor(e.currentTarget, this.getDelegateOptions())
+ $(e.currentTarget).data('bs.' + this.type, self)
+ }
+ }
+
+ if (e) {
+ self.inState.click = !self.inState.click
+ if (self.isInStateTrue()) self.enter(self)
+ else self.leave(self)
+ } else {
+ self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
+ }
+ }
+
+ Tooltip.prototype.destroy = function () {
+ var that = this
+ clearTimeout(this.timeout)
+ this.hide(function () {
+ that.$element.off('.' + that.type).removeData('bs.' + that.type)
+ if (that.$tip) {
+ that.$tip.detach()
+ }
+ that.$tip = null
+ that.$arrow = null
+ that.$viewport = null
+ that.$element = null
+ })
+ }
+
+
+ // TOOLTIP PLUGIN DEFINITION
+ // =========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.tooltip')
+ var options = typeof option == 'object' && option
+
+ if (!data && /destroy|hide/.test(option)) return
+ if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.tooltip
+
+ $.fn.tooltip = Plugin
+ $.fn.tooltip.Constructor = Tooltip
+
+
+ // TOOLTIP NO CONFLICT
+ // ===================
+
+ $.fn.tooltip.noConflict = function () {
+ $.fn.tooltip = old
+ return this
+ }
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: popover.js v3.3.7
+ * http://getbootstrap.com/javascript/#popovers
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // POPOVER PUBLIC CLASS DEFINITION
+ // ===============================
+
+ var Popover = function (element, options) {
+ this.init('popover', element, options)
+ }
+
+ if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
+
+ Popover.VERSION = '3.3.7'
+
+ Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
+ placement: 'right',
+ trigger: 'click',
+ content: '',
+ template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
+ })
+
+
+ // NOTE: POPOVER EXTENDS tooltip.js
+ // ================================
+
+ Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
+
+ Popover.prototype.constructor = Popover
+
+ Popover.prototype.getDefaults = function () {
+ return Popover.DEFAULTS
+ }
+
+ Popover.prototype.setContent = function () {
+ var $tip = this.tip()
+ var title = this.getTitle()
+ var content = this.getContent()
+
+ $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
+ $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
+ this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
+ ](content)
+
+ $tip.removeClass('fade top bottom left right in')
+
+ // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
+ // this manually by checking the contents.
+ if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
+ }
+
+ Popover.prototype.hasContent = function () {
+ return this.getTitle() || this.getContent()
+ }
+
+ Popover.prototype.getContent = function () {
+ var $e = this.$element
+ var o = this.options
+
+ return $e.attr('data-content')
+ || (typeof o.content == 'function' ?
+ o.content.call($e[0]) :
+ o.content)
+ }
+
+ Popover.prototype.arrow = function () {
+ return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
+ }
+
+
+ // POPOVER PLUGIN DEFINITION
+ // =========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.popover')
+ var options = typeof option == 'object' && option
+
+ if (!data && /destroy|hide/.test(option)) return
+ if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.popover
+
+ $.fn.popover = Plugin
+ $.fn.popover.Constructor = Popover
+
+
+ // POPOVER NO CONFLICT
+ // ===================
+
+ $.fn.popover.noConflict = function () {
+ $.fn.popover = old
+ return this
+ }
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: scrollspy.js v3.3.7
+ * http://getbootstrap.com/javascript/#scrollspy
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // SCROLLSPY CLASS DEFINITION
+ // ==========================
+
+ function ScrollSpy(element, options) {
+ this.$body = $(document.body)
+ this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
+ this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
+ this.selector = (this.options.target || '') + ' .nav li > a'
+ this.offsets = []
+ this.targets = []
+ this.activeTarget = null
+ this.scrollHeight = 0
+
+ this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
+ this.refresh()
+ this.process()
+ }
+
+ ScrollSpy.VERSION = '3.3.7'
+
+ ScrollSpy.DEFAULTS = {
+ offset: 10
+ }
+
+ ScrollSpy.prototype.getScrollHeight = function () {
+ return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
+ }
+
+ ScrollSpy.prototype.refresh = function () {
+ var that = this
+ var offsetMethod = 'offset'
+ var offsetBase = 0
+
+ this.offsets = []
+ this.targets = []
+ this.scrollHeight = this.getScrollHeight()
+
+ if (!$.isWindow(this.$scrollElement[0])) {
+ offsetMethod = 'position'
+ offsetBase = this.$scrollElement.scrollTop()
+ }
+
+ this.$body
+ .find(this.selector)
+ .map(function () {
+ var $el = $(this)
+ var href = $el.data('target') || $el.attr('href')
+ var $href = /^#./.test(href) && $(href)
+
+ return ($href
+ && $href.length
+ && $href.is(':visible')
+ && [[$href[offsetMethod]().top + offsetBase, href]]) || null
+ })
+ .sort(function (a, b) { return a[0] - b[0] })
+ .each(function () {
+ that.offsets.push(this[0])
+ that.targets.push(this[1])
+ })
+ }
+
+ ScrollSpy.prototype.process = function () {
+ var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
+ var scrollHeight = this.getScrollHeight()
+ var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
+ var offsets = this.offsets
+ var targets = this.targets
+ var activeTarget = this.activeTarget
+ var i
+
+ if (this.scrollHeight != scrollHeight) {
+ this.refresh()
+ }
+
+ if (scrollTop >= maxScroll) {
+ return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
+ }
+
+ if (activeTarget && scrollTop < offsets[0]) {
+ this.activeTarget = null
+ return this.clear()
+ }
+
+ for (i = offsets.length; i--;) {
+ activeTarget != targets[i]
+ && scrollTop >= offsets[i]
+ && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
+ && this.activate(targets[i])
+ }
+ }
+
+ ScrollSpy.prototype.activate = function (target) {
+ this.activeTarget = target
+
+ this.clear()
+
+ var selector = this.selector +
+ '[data-target="' + target + '"],' +
+ this.selector + '[href="' + target + '"]'
+
+ var active = $(selector)
+ .parents('li')
+ .addClass('active')
+
+ if (active.parent('.dropdown-menu').length) {
+ active = active
+ .closest('li.dropdown')
+ .addClass('active')
+ }
+
+ active.trigger('activate.bs.scrollspy')
+ }
+
+ ScrollSpy.prototype.clear = function () {
+ $(this.selector)
+ .parentsUntil(this.options.target, '.active')
+ .removeClass('active')
+ }
+
+
+ // SCROLLSPY PLUGIN DEFINITION
+ // ===========================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.scrollspy')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.scrollspy
+
+ $.fn.scrollspy = Plugin
+ $.fn.scrollspy.Constructor = ScrollSpy
+
+
+ // SCROLLSPY NO CONFLICT
+ // =====================
+
+ $.fn.scrollspy.noConflict = function () {
+ $.fn.scrollspy = old
+ return this
+ }
+
+
+ // SCROLLSPY DATA-API
+ // ==================
+
+ $(window).on('load.bs.scrollspy.data-api', function () {
+ $('[data-spy="scroll"]').each(function () {
+ var $spy = $(this)
+ Plugin.call($spy, $spy.data())
+ })
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: tab.js v3.3.7
+ * http://getbootstrap.com/javascript/#tabs
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // TAB CLASS DEFINITION
+ // ====================
+
+ var Tab = function (element) {
+ // jscs:disable requireDollarBeforejQueryAssignment
+ this.element = $(element)
+ // jscs:enable requireDollarBeforejQueryAssignment
+ }
+
+ Tab.VERSION = '3.3.7'
+
+ Tab.TRANSITION_DURATION = 150
+
+ Tab.prototype.show = function () {
+ var $this = this.element
+ var $ul = $this.closest('ul:not(.dropdown-menu)')
+ var selector = $this.data('target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+ }
+
+ if ($this.parent('li').hasClass('active')) return
+
+ var $previous = $ul.find('.active:last a')
+ var hideEvent = $.Event('hide.bs.tab', {
+ relatedTarget: $this[0]
+ })
+ var showEvent = $.Event('show.bs.tab', {
+ relatedTarget: $previous[0]
+ })
+
+ $previous.trigger(hideEvent)
+ $this.trigger(showEvent)
+
+ if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
+
+ var $target = $(selector)
+
+ this.activate($this.closest('li'), $ul)
+ this.activate($target, $target.parent(), function () {
+ $previous.trigger({
+ type: 'hidden.bs.tab',
+ relatedTarget: $this[0]
+ })
+ $this.trigger({
+ type: 'shown.bs.tab',
+ relatedTarget: $previous[0]
+ })
+ })
+ }
+
+ Tab.prototype.activate = function (element, container, callback) {
+ var $active = container.find('> .active')
+ var transition = callback
+ && $.support.transition
+ && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)
+
+ function next() {
+ $active
+ .removeClass('active')
+ .find('> .dropdown-menu > .active')
+ .removeClass('active')
+ .end()
+ .find('[data-toggle="tab"]')
+ .attr('aria-expanded', false)
+
+ element
+ .addClass('active')
+ .find('[data-toggle="tab"]')
+ .attr('aria-expanded', true)
+
+ if (transition) {
+ element[0].offsetWidth // reflow for transition
+ element.addClass('in')
+ } else {
+ element.removeClass('fade')
+ }
+
+ if (element.parent('.dropdown-menu').length) {
+ element
+ .closest('li.dropdown')
+ .addClass('active')
+ .end()
+ .find('[data-toggle="tab"]')
+ .attr('aria-expanded', true)
+ }
+
+ callback && callback()
+ }
+
+ $active.length && transition ?
+ $active
+ .one('bsTransitionEnd', next)
+ .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
+ next()
+
+ $active.removeClass('in')
+ }
+
+
+ // TAB PLUGIN DEFINITION
+ // =====================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.tab')
+
+ if (!data) $this.data('bs.tab', (data = new Tab(this)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.tab
+
+ $.fn.tab = Plugin
+ $.fn.tab.Constructor = Tab
+
+
+ // TAB NO CONFLICT
+ // ===============
+
+ $.fn.tab.noConflict = function () {
+ $.fn.tab = old
+ return this
+ }
+
+
+ // TAB DATA-API
+ // ============
+
+ var clickHandler = function (e) {
+ e.preventDefault()
+ Plugin.call($(this), 'show')
+ }
+
+ $(document)
+ .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
+ .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: affix.js v3.3.7
+ * http://getbootstrap.com/javascript/#affix
+ * ========================================================================
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // AFFIX CLASS DEFINITION
+ // ======================
+
+ var Affix = function (element, options) {
+ this.options = $.extend({}, Affix.DEFAULTS, options)
+
+ this.$target = $(this.options.target)
+ .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
+ .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
+
+ this.$element = $(element)
+ this.affixed = null
+ this.unpin = null
+ this.pinnedOffset = null
+
+ this.checkPosition()
+ }
+
+ Affix.VERSION = '3.3.7'
+
+ Affix.RESET = 'affix affix-top affix-bottom'
+
+ Affix.DEFAULTS = {
+ offset: 0,
+ target: window
+ }
+
+ Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
+ var scrollTop = this.$target.scrollTop()
+ var position = this.$element.offset()
+ var targetHeight = this.$target.height()
+
+ if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
+
+ if (this.affixed == 'bottom') {
+ if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
+ return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
+ }
+
+ var initializing = this.affixed == null
+ var colliderTop = initializing ? scrollTop : position.top
+ var colliderHeight = initializing ? targetHeight : height
+
+ if (offsetTop != null && scrollTop <= offsetTop) return 'top'
+ if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
+
+ return false
+ }
+
+ Affix.prototype.getPinnedOffset = function () {
+ if (this.pinnedOffset) return this.pinnedOffset
+ this.$element.removeClass(Affix.RESET).addClass('affix')
+ var scrollTop = this.$target.scrollTop()
+ var position = this.$element.offset()
+ return (this.pinnedOffset = position.top - scrollTop)
+ }
+
+ Affix.prototype.checkPositionWithEventLoop = function () {
+ setTimeout($.proxy(this.checkPosition, this), 1)
+ }
+
+ Affix.prototype.checkPosition = function () {
+ if (!this.$element.is(':visible')) return
+
+ var height = this.$element.height()
+ var offset = this.options.offset
+ var offsetTop = offset.top
+ var offsetBottom = offset.bottom
+ var scrollHeight = Math.max($(document).height(), $(document.body).height())
+
+ if (typeof offset != 'object') offsetBottom = offsetTop = offset
+ if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
+ if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
+
+ var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
+
+ if (this.affixed != affix) {
+ if (this.unpin != null) this.$element.css('top', '')
+
+ var affixType = 'affix' + (affix ? '-' + affix : '')
+ var e = $.Event(affixType + '.bs.affix')
+
+ this.$element.trigger(e)
+
+ if (e.isDefaultPrevented()) return
+
+ this.affixed = affix
+ this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
+
+ this.$element
+ .removeClass(Affix.RESET)
+ .addClass(affixType)
+ .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
+ }
+
+ if (affix == 'bottom') {
+ this.$element.offset({
+ top: scrollHeight - height - offsetBottom
+ })
+ }
+ }
+
+
+ // AFFIX PLUGIN DEFINITION
+ // =======================
+
+ function Plugin(option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.affix')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ var old = $.fn.affix
+
+ $.fn.affix = Plugin
+ $.fn.affix.Constructor = Affix
+
+
+ // AFFIX NO CONFLICT
+ // =================
+
+ $.fn.affix.noConflict = function () {
+ $.fn.affix = old
+ return this
+ }
+
+
+ // AFFIX DATA-API
+ // ==============
+
+ $(window).on('load', function () {
+ $('[data-spy="affix"]').each(function () {
+ var $spy = $(this)
+ var data = $spy.data()
+
+ data.offset = data.offset || {}
+
+ if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
+ if (data.offsetTop != null) data.offset.top = data.offsetTop
+
+ Plugin.call($spy, data)
+ })
+ })
+
+}(jQuery);
diff --git a/GitCandy.Web/Scripts/bootstrap.min.js b/GitCandy.Web/Scripts/bootstrap.min.js
new file mode 100644
index 0000000..9bcd2fc
--- /dev/null
+++ b/GitCandy.Web/Scripts/bootstrap.min.js
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap v3.3.7 (http://getbootstrap.com)
+ * Copyright 2011-2016 Twitter, Inc.
+ * Licensed under the MIT license
+ */
+if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",c).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in"),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){document===a.target||this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+e).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",a,b)};c.VERSION="3.3.7",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-m<o.top?"bottom":"right"==h&&k.right+l>o.width?"left":"left"==h&&k.left-l<o.left?"right":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element&&e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);if(this.$element.trigger(g),!g.isDefaultPrevented())return f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=window.SVGElement&&c instanceof window.SVGElement,g=d?{top:0,left:0}:f?null:b.offset(),h={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},i=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,h,i,g)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){
+this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.7",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e<c&&"top";if("bottom"==this.affixed)return null!=c?!(e+this.unpin<=f.top)&&"bottom":!(e+g<=a-d)&&"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&e<=c?"top":null!=d&&i+j>=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
\ No newline at end of file
diff --git a/GitCandy.Web/Scripts/bootstrap3-typeahead.js b/GitCandy.Web/Scripts/bootstrap3-typeahead.js
new file mode 100644
index 0000000..4e2c4fb
--- /dev/null
+++ b/GitCandy.Web/Scripts/bootstrap3-typeahead.js
@@ -0,0 +1,438 @@
+/* =============================================================
+ * bootstrap3-typeahead.js v3.0.3
+ * https://github.com/bassjobsen/Bootstrap-3-Typeahead
+ * =============================================================
+ * Original written by @mdo and @fat
+ * =============================================================
+ * Copyright 2014 Bass Jobsen @bassjobsen
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================================================ */
+
+
+(function (root, factory) {
+
+ "use strict";
+
+ // CommonJS module is defined
+ if (typeof module !== 'undefined' && module.exports) {
+ module.exports = factory(require('jquery')(root));
+ }
+ // AMD module is defined
+ else if (typeof define === "function" && define.amd) {
+ define("bootstrap3-typeahead", ["jquery"], function ($) {
+ return factory($);
+ });
+ } else {
+ factory(root.jQuery);
+ }
+
+}(this, function ($) {
+
+ "use strict";
+ // jshint laxcomma: true
+
+
+ /* TYPEAHEAD PUBLIC CLASS DEFINITION
+ * ================================= */
+
+ var Typeahead = function (element, options) {
+ this.$element = $(element);
+ this.options = $.extend({}, $.fn.typeahead.defaults, options);
+ this.matcher = this.options.matcher || this.matcher;
+ this.sorter = this.options.sorter || this.sorter;
+ this.select = this.options.select || this.select;
+ this.autoSelect = typeof this.options.autoSelect == 'boolean' ? this.options.autoSelect : true;
+ this.highlighter = this.options.highlighter || this.highlighter;
+ this.render = this.options.render || this.render;
+ this.updater = this.options.updater || this.updater;
+ this.source = this.options.source;
+ this.delay = typeof this.options.delay == 'number' ? this.options.delay : 250;
+ this.$menu = $(this.options.menu);
+ this.shown = false;
+ this.listen();
+ this.showHintOnFocus = typeof this.options.showHintOnFocus == 'boolean' ? this.options.showHintOnFocus : false;
+ this.afterSelect = this.options.afterSelect
+ };
+
+ Typeahead.prototype = {
+
+ constructor: Typeahead
+
+ , select: function () {
+ var val = this.$menu.find('.active').data('value');
+ if (this.autoSelect || val) {
+ this.$element
+ .val(this.updater(val))
+ .change();
+ this.afterSelect();
+ }
+ return this.hide();
+ }
+
+ , updater: function (item) {
+ return item;
+ }
+
+ , setSource: function (source) {
+ this.source = source;
+ }
+
+ , show: function () {
+ var pos = $.extend({}, this.$element.position(), {
+ height: this.$element[0].offsetHeight
+ }), scrollHeight;
+
+ scrollHeight = typeof this.options.scrollHeight == 'function' ?
+ this.options.scrollHeight.call() :
+ this.options.scrollHeight;
+
+ this.$menu
+ .insertAfter(this.$element)
+ .css({
+ top: pos.top + pos.height + scrollHeight
+ , left: pos.left
+ })
+ .show();
+
+ this.shown = true;
+ return this;
+ }
+
+ , hide: function () {
+ this.$menu.hide();
+ this.shown = false;
+ return this;
+ }
+
+ , lookup: function (query) {
+ var items;
+ if (typeof (query) != 'undefined' && query !== null) {
+ this.query = query;
+ } else {
+ this.query = this.$element.val() || '';
+ }
+
+ if ((this.query.length < this.options.minLength) && !this.showHintOnFocus) {
+ return this.shown ? this.hide() : this;
+ }
+
+ var worker = $.proxy(function () {
+ items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source;
+ if (items) {
+ this.process(items);
+ }
+ }, this)
+
+ clearTimeout(this.lookupWorker)
+ this.lookupWorker = setTimeout(worker, this.delay)
+ }
+
+ , process: function (items) {
+ var that = this;
+
+ items = $.grep(items, function (item) {
+ return that.matcher(item);
+ });
+
+ items = this.sorter(items);
+
+ if (!items.length) {
+ return this.shown ? this.hide() : this;
+ }
+
+ if (this.options.items == 'all') {
+ return this.render(items).show();
+ } else {
+ return this.render(items.slice(0, this.options.items)).show();
+ }
+ }
+
+ , matcher: function (item) {
+ return ~item.toLowerCase().indexOf(this.query.toLowerCase());
+ }
+
+ , sorter: function (items) {
+ var beginswith = []
+ , caseSensitive = []
+ , caseInsensitive = []
+ , item;
+
+ while ((item = items.shift())) {
+ if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item);
+ else if (~item.indexOf(this.query)) caseSensitive.push(item);
+ else caseInsensitive.push(item);
+ }
+
+ return beginswith.concat(caseSensitive, caseInsensitive);
+ }
+
+ , highlighter: function (item) {
+ var html = $('<div></div>');
+ var query = this.query;
+ var i = item.indexOf(query);
+ var len, leftPart, middlePart, rightPart, strong;
+ len = query.length;
+ if (len == 0) {
+ return html.text(item).html();
+ }
+ while (i > -1) {
+ leftPart = item.substr(0, i);
+ middlePart = item.substr(i, len);
+ rightPart = item.substr(i + len);
+ strong = $('<strong></strong>').text(middlePart);
+ html
+ .append(document.createTextNode(leftPart))
+ .append(strong);
+ item = rightPart;
+ i = item.indexOf(query);
+ }
+ return html.append(document.createTextNode(item)).html();
+ }
+
+ , render: function (items) {
+ var that = this;
+
+ items = $(items).map(function (i, item) {
+ i = $(that.options.item).data('value', item);
+ i.find('a').html(that.highlighter(item));
+ return i[0];
+ });
+
+ if (this.autoSelect) {
+ items.first().addClass('active');
+ }
+ this.$menu.html(items);
+ return this;
+ }
+
+ , next: function (event) {
+ var active = this.$menu.find('.active').removeClass('active')
+ , next = active.next();
+
+ if (!next.length) {
+ next = $(this.$menu.find('li')[0]);
+ }
+
+ next.addClass('active');
+ }
+
+ , prev: function (event) {
+ var active = this.$menu.find('.active').removeClass('active')
+ , prev = active.prev();
+
+ if (!prev.length) {
+ prev = this.$menu.find('li').last();
+ }
+
+ prev.addClass('active');
+ }
+
+ , listen: function () {
+ this.$element
+ .on('focus', $.proxy(this.focus, this))
+ .on('blur', $.proxy(this.blur, this))
+ .on('keypress', $.proxy(this.keypress, this))
+ .on('keyup', $.proxy(this.keyup, this));
+
+ if (this.eventSupported('keydown')) {
+ this.$element.on('keydown', $.proxy(this.keydown, this));
+ }
+
+ this.$menu
+ .on('click', $.proxy(this.click, this))
+ .on('mouseenter', 'li', $.proxy(this.mouseenter, this))
+ .on('mouseleave', 'li', $.proxy(this.mouseleave, this));
+ }
+ , destroy: function () {
+ this.$element.data('typeahead', null);
+ this.$element
+ .off('focus')
+ .off('blur')
+ .off('keypress')
+ .off('keyup');
+
+ if (this.eventSupported('keydown')) {
+ this.$element.off('keydown');
+ }
+
+ this.$menu.remove();
+ }
+ , eventSupported: function (eventName) {
+ var isSupported = eventName in this.$element;
+ if (!isSupported) {
+ this.$element.setAttribute(eventName, 'return;');
+ isSupported = typeof this.$element[eventName] === 'function';
+ }
+ return isSupported;
+ }
+
+ , move: function (e) {
+ if (!this.shown) return;
+
+ switch (e.keyCode) {
+ case 9: // tab
+ case 13: // enter
+ case 27: // escape
+ e.preventDefault();
+ break;
+
+ case 38: // up arrow
+ // with the shiftKey (this is actually the left parenthesis)
+ if (e.shiftKey) return;
+ e.preventDefault();
+ this.prev();
+ break;
+
+ case 40: // down arrow
+ // with the shiftKey (this is actually the right parenthesis)
+ if (e.shiftKey) return;
+ e.preventDefault();
+ this.next();
+ break;
+ }
+
+ e.stopPropagation();
+ }
+
+ , keydown: function (e) {
+ this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40, 38, 9, 13, 27]);
+ if (!this.shown && e.keyCode == 40) {
+ this.lookup("");
+ } else {
+ this.move(e);
+ }
+ }
+
+ , keypress: function (e) {
+ if (this.suppressKeyPressRepeat) return;
+ this.move(e);
+ }
+
+ , keyup: function (e) {
+ switch (e.keyCode) {
+ case 40: // down arrow
+ case 38: // up arrow
+ case 16: // shift
+ case 17: // ctrl
+ case 18: // alt
+ break;
+
+ case 9: // tab
+ case 13: // enter
+ if (!this.shown) return;
+ this.select();
+ break;
+
+ case 27: // escape
+ if (!this.shown) return;
+ this.hide();
+ break;
+ default:
+ this.lookup();
+ }
+
+ e.stopPropagation();
+ e.preventDefault();
+ }
+
+ , focus: function (e) {
+ if (!this.focused) {
+ this.focused = true;
+ if (this.options.minLength === 0 && !this.$element.val() || this.options.showHintOnFocus) {
+ this.lookup();
+ }
+ }
+ }
+
+ , blur: function (e) {
+ this.focused = false;
+ if (!this.mousedover && this.shown) this.hide();
+ }
+
+ , click: function (e) {
+ e.stopPropagation();
+ e.preventDefault();
+ this.select();
+ this.$element.focus();
+ }
+
+ , mouseenter: function (e) {
+ this.mousedover = true;
+ this.$menu.find('.active').removeClass('active');
+ $(e.currentTarget).addClass('active');
+ }
+
+ , mouseleave: function (e) {
+ this.mousedover = false;
+ if (!this.focused && this.shown) this.hide();
+ }
+
+ };
+
+
+ /* TYPEAHEAD PLUGIN DEFINITION
+ * =========================== */
+
+ var old = $.fn.typeahead;
+
+ $.fn.typeahead = function (option) {
+ var arg = arguments;
+ return this.each(function () {
+ var $this = $(this)
+ , data = $this.data('typeahead')
+ , options = typeof option == 'object' && option;
+ if (!data) $this.data('typeahead', (data = new Typeahead(this, options)));
+ if (typeof option == 'string') {
+ if (arg.length > 1) {
+ data[option].apply(data, Array.prototype.slice.call(arg, 1));
+ } else {
+ data[option]();
+ }
+ }
+ });
+ };
+
+ $.fn.typeahead.defaults = {
+ source: []
+ , items: 8
+ , menu: '<ul class="typeahead dropdown-menu"></ul>'
+ , item: '<li><a href="#"></a></li>'
+ , minLength: 1
+ , scrollHeight: 0
+ , autoSelect: true
+ , afterSelect: $.noop
+ };
+
+ $.fn.typeahead.Constructor = Typeahead;
+
+
+ /* TYPEAHEAD NO CONFLICT
+ * =================== */
+
+ $.fn.typeahead.noConflict = function () {
+ $.fn.typeahead = old;
+ return this;
+ };
+
+
+ /* TYPEAHEAD DATA-API
+ * ================== */
+
+ $(document).on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
+ var $this = $(this);
+ if ($this.data('typeahead')) return;
+ $this.typeahead($this.data());
+ });
+
+}));
\ No newline at end of file
diff --git a/GitCandy.Web/Scripts/common.js b/GitCandy.Web/Scripts/common.js
new file mode 100644
index 0000000..68c22cb
--- /dev/null
+++ b/GitCandy.Web/Scripts/common.js
@@ -0,0 +1,332 @@
+
+; (function ($, undefined) {
+ 'use strict';
+
+ $.extend({
+ queryString: {
+ parse: function (str) {
+ /*!
+ https://github.com/sindresorhus/query-string
+ by Sindre Sorhus
+ MIT License
+ */
+ var set = typeof str === 'undefined';
+
+ if (set && $.queryString.parsed)
+ return $.queryString.parsed;
+
+ var segments = (set ? window.location.search : str).replace(/^\?/, '').split('&');
+
+ var ret = {};
+ segments.forEach(function (param) {
+ var parts = param.replace(/\+/g, ' ').split('=');
+ var key = parts[0];
+ var val = parts[1];
+ if (!(key && val))
+ return;
+
+ key = decodeURIComponent(key);
+ // missing `=` should be `null`:
+ // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters
+ val = typeof val === 'undefined' ? null : decodeURIComponent(val);
+
+ if (!ret.hasOwnProperty(key)) {
+ ret[key] = val;
+ } else if (Array.isArray(ret[key])) {
+ ret[key].push(val);
+ } else {
+ ret[key] = [ret[key], val];
+ }
+ });
+
+ var parsed = {
+ query: ret,
+ get: function (key, ignoreCase) {
+ var ign = !!ignoreCase;
+ if (ign)
+ key = key.toUpperCase();
+
+ var keys = Object.keys(ret);
+ for (var i in keys) {
+ var prop = keys[i];
+ if (ign && key === prop.toUpperCase()
+ || !ign && key === prop) {
+ return ret[prop];
+ }
+ }
+ }
+ };
+
+ if (set)
+ $.queryString.parsed = parsed;
+
+ return parsed;
+ }
+ },
+ stringFormat: function () {
+ var args = arguments;
+ if (args.length == 0 || typeof args[0] !== 'string')
+ return '';
+ return args[0].replace(/{(\d+)}/g, function (match, number) {
+ var index = parseInt(number);
+ return typeof args[index + 1] !== 'undefined'
+ ? args[index + 1]
+ : match;
+ });
+ }
+ });
+
+ $.queryString.query = $.queryString.parse().query;
+ $.queryString.get = function (key, ignoreCase) {
+ return $.queryString.parse().get(key, ignoreCase);
+ };
+
+})(window.jQuery);
+
+; window.jQuery(function ($) {
+ 'use strict';
+
+ $('#md').html(marked($('#md').text()));
+ $('.focus :text').focus();
+ $('.focus :text[name=query]').val($.queryString.get('query', true));
+ // copy to clipboard
+ $('.copy-clip').each(function () {
+ var $btn = $(this),
+ $text = $btn.parent().parent().find(':text');
+
+ $text.click(function () {
+ $text.select();
+ });
+ $btn.click(function () {
+ $text.select();
+ document.execCommand("copy");
+ this.setAttribute("aria-label", $btn.data('copied'));
+ $btn.blur();
+ });
+ $btn.mouseleave(function () {
+ this.setAttribute("aria-label", $btn.data('tips'));
+ });
+ });
+ // switch git url
+ $('[data-giturl]').click(function () {
+ var $this = $(this),
+ $group = $this.closest('.input-group'),
+ url = $this.data('giturl'),
+ type = $this.text();
+ $group.find(':text').val(url);
+ $group.find('button:first').html(type + ' <span class="caret"></span>');
+ });
+ // prevent all empty link
+ $('a[href=#]').click(function () {
+ event.preventDefault();
+ });
+ $('.branch-from, .branch-to').each(function () {
+ var $con = $(this);
+ $con.find('.tab-content li').click(function () {
+ var $bn = $con.find('.branch-name'),
+ $li = $(this);
+ $bn.text($li.text());
+ $bn.prev('i').attr('class',
+ $li.closest('div').attr('id').indexOf('branch') == 0 ? 'glyphicon glyphicon-random' : 'glyphicon glyphicon-tag');
+ $con.find('.dropdown').removeClass('open');
+ });
+ });
+ $('.branch-compare').click(function () {
+ var from = $('.branch-from .branch-name').text().trim().replace(/\//g, ';'),
+ to = $('.branch-to .branch-name').text().trim().replace(/\//g, ';'),
+ relative = escape(from) + '...' + escape(to),
+ base = window.location.href,
+ seg = base.split('/'),
+ last = seg[seg.length - 1],
+ append = last != '' && last.indexOf('...') == -1;
+
+ append
+ ? window.location.href += '/' + relative
+ : window.location.href = relative;
+ });
+
+ $(".switch input:checkbox").bootstrapSwitch();
+ // blame page
+ $('[data-brush]').each(function () {
+ var $section = $(this),
+ $blocks = $section.find('.no-highlight'),
+ brush = $section.data('brush'),
+ language = hljs.getLanguage(brush),
+ state = null;
+ if (!language)
+ return;
+ $blocks.each(function (i, e) {
+ var $this = $(this),
+ result = hljs.highlight(brush, $this.text(), true, state);
+ state = result.top;
+ $(e).html(result.value);
+ })
+ });
+ // delete a branch
+ $('[data-branch]').click(function () {
+ var $this = $(this),
+ name = $this.data('branch');
+ if (confirm($.stringFormat(deleteBranch_params.words, name))) {
+ $this.disabled = true;
+ $.post(deleteBranch_params.url, { path: name }, function () {
+ $this.closest('tr').remove();
+ });
+ }
+ });
+ // delete a tag
+ $('[data-tag]').click(function () {
+ var $this = $(this),
+ name = $this.data('tag');
+ if (confirm($.stringFormat(deleteTag_params.words, name))) {
+ $this.disabled = true;
+ $.post(deleteTag_params.url, { path: name }, function () {
+ $this.closest('div .row').remove();
+ });
+ }
+ });
+ // chooser
+ typeof chooser_params !== 'undefined'
+ && chooser_params instanceof Array
+ && chooser_params.forEach(function (params) {
+ /*
+ params ->
+ data -> data
+ controller -> controller for anchor
+ container -> container selector
+ add_label -> add
+ del_label -> remove
+ use_ret_val -> if true, show return value as text
+ add_action
+ -> [action object]
+ del_action
+ -> [action object]
+ action_array-> [] several objects
+ -> four pair and four objects with three name (checked, unchecked)
+ -> key
+ -> on_label
+ -> off_label
+ -> other each object
+ -> [action object]
+
+ [action object]
+ -> url
+ -> query : function (item){} // return a json object such as {team: team, user: item, act: "del"}
+ */
+ var $container = $(params.container),
+ $searcher = $('<input type="text" autocomplete="off">'),
+ $add_btn = $('<button type="button" class="btn btn-primary">' + params.add_label + '</button>'),
+ $alert_holder = $('<div class="alert_placeholder">'),
+ $grid = $('<div>');
+
+ var warning = function (message) {
+ $alert_holder.html('<div class="alert alert-danger"><a class="close" data-dismiss="alert">×</a><span>' + message + '</span></div>')
+ };
+ var clearWarning = function () {
+ $alert_holder.html('');
+ };
+ var parseResponseJson = function (text) {
+ try {
+ return JSON.parse(text);
+ } catch (e) {
+ return 'Connection error';
+ }
+ };
+ var add_row = function (item) {
+ var row_html = '<div class="row border-area">',
+ alter_row_html = '<div>',
+ name_html = '<p class="lead">' + (params.controller
+ ? '<a href="/' + params.controller + '/Detail/' + item.Name + '">' + item.Name + '</a>'
+ : item.Name) + '</p>',
+ remover_html = '<a href="#" class="remover btn btn-danger">' + params.del_label + '</a>',
+ $row = $(row_html),
+ $first_row = $(alter_row_html),
+ $second_row = $(alter_row_html),
+ $nameref = $(name_html),
+ $remover = $(remover_html);
+
+ $remover.click(function () {
+ clearWarning();
+ var $mask = $('<div class="disable-mask">');
+ $row.append($mask);
+ event.preventDefault();
+ var xhr = $.post(params.del_action.url, params.del_action.query(item.Name), function (data) {
+ $row.remove();
+ })
+ .fail(function () {
+ $mask.remove();
+ warning(parseResponseJson(xhr.responseText));
+ });
+ });
+
+ console.log(item);
+
+ params.action_array.forEach(function (action) {
+ var cell_html = '<div class="col-md-3"><input type="checkbox" /></div>',
+ $cell = $(cell_html),
+ $checkbox = $cell.find('input');
+
+ $checkbox.bootstrapSwitch({ state: item[action.key], size: 'small', onText: action.on_label, offText: action.off_label });
+
+ var tobe = null;
+ $checkbox.on('switchChange.bootstrapSwitch', function (event, state) {
+ if (tobe == state) {
+ tobe = null;
+ return;
+ }
+ $checkbox.bootstrapSwitch('readonly', true);
+ clearWarning();
+ var xhr = $.post(state ? action.checked.url : action.unchecked.url,
+ state ? action.checked.query(item.Name) : action.unchecked.query(item.Name),
+ function (data) { })
+ .fail(function () {
+ tobe = !state;
+ $checkbox.bootstrapSwitch('state', tobe);
+ warning(parseResponseJson(xhr.responseText));
+ })
+ .always(function () { $checkbox.bootstrapSwitch('readonly', false); });
+ });
+
+ $second_row.append($cell);
+ });
+
+ $first_row.append($nameref);
+ $first_row.append($remover);
+
+ $row.append($first_row);
+ $row.append($second_row);
+
+ $grid.append($row);
+ };
+ params.controller && $searcher.typeahead({
+ source: function (query, process) {
+ return $.post('/' + params.controller + '/Search', { query: query }, function (data) {
+ return process(data);
+ });
+ },
+ items: 10
+ });
+ $add_btn.click(function () {
+ clearWarning();
+ var name = $searcher.val();
+ var xhr = $.post(params.add_action.url, params.add_action.query(name), function (data) {
+ add_row(params.use_ret_val ? { Name: data } : $.extend({ Name: name }, data));
+ $searcher.val('');
+ })
+ .fail(function () {
+ warning(parseResponseJson(xhr.responseText));
+ });
+ });
+
+ var $row = $('<div class="form-group">');
+
+ $searcher.addClass("form-control");
+ $row.append($searcher.wrap('<div class="input-group">').parent());
+ $('.input-group', $row).append($add_btn.wrap('<span class="input-group-btn">').parent());
+
+ $container.append($row);
+ $container.append($alert_holder.wrap('<div>').parent());
+ $container.append($grid.wrap('<div>').parent());
+
+ params.data.forEach(function (item) { add_row(item) });
+ });
+});
diff --git a/GitCandy.Web/Scripts/highlight.pack.js b/GitCandy.Web/Scripts/highlight.pack.js
new file mode 100644
index 0000000..5848592
--- /dev/null
+++ b/GitCandy.Web/Scripts/highlight.pack.js
@@ -0,0 +1,16445 @@
+//https://github.com/isagalaev/highlight.js
+//Version 9.5.0 (59d16fe52c58b74bd9a868be9f2a1a5aef3d009d)
+
+;(function(){
+/*
+Syntax highlighting with language autodetection.
+https://highlightjs.org/
+*/
+
+(function(factory) {
+
+ // Find the global object for export to both the browser and web workers.
+ var globalObject = typeof window === 'object' && window ||
+ typeof self === 'object' && self;
+
+ // Setup highlight.js for different environments. First is Node.js or
+ // CommonJS.
+ if(typeof exports !== 'undefined') {
+ factory(exports);
+ } else if(globalObject) {
+ // Export hljs globally even when using AMD for cases when this script
+ // is loaded with others that may still expect a global hljs.
+ globalObject.hljs = factory({});
+
+ // Finally register the global hljs with AMD.
+ if(typeof define === 'function' && define.amd) {
+ define([], function() {
+ return globalObject.hljs;
+ });
+ }
+ }
+
+}(function(hljs) {
+ // Convenience variables for build-in objects
+ var ArrayProto = [],
+ objectKeys = Object.keys;
+
+ // Global internal variables used within the highlight.js library.
+ var languages = {},
+ aliases = {};
+
+ // Regular expressions used throughout the highlight.js library.
+ var noHighlightRe = /^(no-?highlight|plain|text)$/i,
+ languagePrefixRe = /\blang(?:uage)?-([\w-]+)\b/i,
+ fixMarkupRe = /((^(<[^>]+>|\t|)+|(?:\n)))/gm;
+
+ var spanEndTag = '</span>';
+
+ // Global options used when within external APIs. This is modified when
+ // calling the `hljs.configure` function.
+ var options = {
+ classPrefix: 'hljs-',
+ tabReplace: null,
+ useBR: false,
+ languages: undefined
+ };
+
+ // Object map that is used to escape some common HTML characters.
+ var escapeRegexMap = {
+ '&': '&',
+ '<': '<',
+ '>': '>'
+ };
+
+ /* Utility functions */
+
+ function escape(value) {
+ return value.replace(/[&<>]/gm, function(character) {
+ return escapeRegexMap[character];
+ });
+ }
+
+ function tag(node) {
+ return node.nodeName.toLowerCase();
+ }
+
+ function testRe(re, lexeme) {
+ var match = re && re.exec(lexeme);
+ return match && match.index === 0;
+ }
+
+ function isNotHighlighted(language) {
+ return noHighlightRe.test(language);
+ }
+
+ function blockLanguage(block) {
+ var i, match, length, _class;
+ var classes = block.className + ' ';
+
+ classes += block.parentNode ? block.parentNode.className : '';
+
+ // language-* takes precedence over non-prefixed class names.
+ match = languagePrefixRe.exec(classes);
+ if (match) {
+ return getLanguage(match[1]) ? match[1] : 'no-highlight';
+ }
+
+ classes = classes.split(/\s+/);
+
+ for (i = 0, length = classes.length; i < length; i++) {
+ _class = classes[i]
+
+ if (isNotHighlighted(_class) || getLanguage(_class)) {
+ return _class;
+ }
+ }
+ }
+
+ function inherit(parent, obj) {
+ var key;
+ var result = {};
+
+ for (key in parent)
+ result[key] = parent[key];
+ if (obj)
+ for (key in obj)
+ result[key] = obj[key];
+ return result;
+ }
+
+ /* Stream merging */
+
+ function nodeStream(node) {
+ var result = [];
+ (function _nodeStream(node, offset) {
+ for (var child = node.firstChild; child; child = child.nextSibling) {
+ if (child.nodeType === 3)
+ offset += child.nodeValue.length;
+ else if (child.nodeType === 1) {
+ result.push({
+ event: 'start',
+ offset: offset,
+ node: child
+ });
+ offset = _nodeStream(child, offset);
+ // Prevent void elements from having an end tag that would actually
+ // double them in the output. There are more void elements in HTML
+ // but we list only those realistically expected in code display.
+ if (!tag(child).match(/br|hr|img|input/)) {
+ result.push({
+ event: 'stop',
+ offset: offset,
+ node: child
+ });
+ }
+ }
+ }
+ return offset;
+ })(node, 0);
+ return result;
+ }
+
+ function mergeStreams(original, highlighted, value) {
+ var processed = 0;
+ var result = '';
+ var nodeStack = [];
+
+ function selectStream() {
+ if (!original.length || !highlighted.length) {
+ return original.length ? original : highlighted;
+ }
+ if (original[0].offset !== highlighted[0].offset) {
+ return (original[0].offset < highlighted[0].offset) ? original : highlighted;
+ }
+
+ /*
+ To avoid starting the stream just before it should stop the order is
+ ensured that original always starts first and closes last:
+
+ if (event1 == 'start' && event2 == 'start')
+ return original;
+ if (event1 == 'start' && event2 == 'stop')
+ return highlighted;
+ if (event1 == 'stop' && event2 == 'start')
+ return original;
+ if (event1 == 'stop' && event2 == 'stop')
+ return highlighted;
+
+ ... which is collapsed to:
+ */
+ return highlighted[0].event === 'start' ? original : highlighted;
+ }
+
+ function open(node) {
+ function attr_str(a) {return ' ' + a.nodeName + '="' + escape(a.value) + '"';}
+ result += '<' + tag(node) + ArrayProto.map.call(node.attributes, attr_str).join('') + '>';
+ }
+
+ function close(node) {
+ result += '</' + tag(node) + '>';
+ }
+
+ function render(event) {
+ (event.event === 'start' ? open : close)(event.node);
+ }
+
+ while (original.length || highlighted.length) {
+ var stream = selectStream();
+ result += escape(value.substr(processed, stream[0].offset - processed));
+ processed = stream[0].offset;
+ if (stream === original) {
+ /*
+ On any opening or closing tag of the original markup we first close
+ the entire highlighted node stack, then render the original tag along
+ with all the following original tags at the same offset and then
+ reopen all the tags on the highlighted stack.
+ */
+ nodeStack.reverse().forEach(close);
+ do {
+ render(stream.splice(0, 1)[0]);
+ stream = selectStream();
+ } while (stream === original && stream.length && stream[0].offset === processed);
+ nodeStack.reverse().forEach(open);
+ } else {
+ if (stream[0].event === 'start') {
+ nodeStack.push(stream[0].node);
+ } else {
+ nodeStack.pop();
+ }
+ render(stream.splice(0, 1)[0]);
+ }
+ }
+ return result + escape(value.substr(processed));
+ }
+
+ /* Initialization */
+
+ function compileLanguage(language) {
+
+ function reStr(re) {
+ return (re && re.source) || re;
+ }
+
+ function langRe(value, global) {
+ return new RegExp(
+ reStr(value),
+ 'm' + (language.case_insensitive ? 'i' : '') + (global ? 'g' : '')
+ );
+ }
+
+ function compileMode(mode, parent) {
+ if (mode.compiled)
+ return;
+ mode.compiled = true;
+
+ mode.keywords = mode.keywords || mode.beginKeywords;
+ if (mode.keywords) {
+ var compiled_keywords = {};
+
+ var flatten = function(className, str) {
+ if (language.case_insensitive) {
+ str = str.toLowerCase();
+ }
+ str.split(' ').forEach(function(kw) {
+ var pair = kw.split('|');
+ compiled_keywords[pair[0]] = [className, pair[1] ? Number(pair[1]) : 1];
+ });
+ };
+
+ if (typeof mode.keywords === 'string') { // string
+ flatten('keyword', mode.keywords);
+ } else {
+ objectKeys(mode.keywords).forEach(function (className) {
+ flatten(className, mode.keywords[className]);
+ });
+ }
+ mode.keywords = compiled_keywords;
+ }
+ mode.lexemesRe = langRe(mode.lexemes || /\w+/, true);
+
+ if (parent) {
+ if (mode.beginKeywords) {
+ mode.begin = '\\b(' + mode.beginKeywords.split(' ').join('|') + ')\\b';
+ }
+ if (!mode.begin)
+ mode.begin = /\B|\b/;
+ mode.beginRe = langRe(mode.begin);
+ if (!mode.end && !mode.endsWithParent)
+ mode.end = /\B|\b/;
+ if (mode.end)
+ mode.endRe = langRe(mode.end);
+ mode.terminator_end = reStr(mode.end) || '';
+ if (mode.endsWithParent && parent.terminator_end)
+ mode.terminator_end += (mode.end ? '|' : '') + parent.terminator_end;
+ }
+ if (mode.illegal)
+ mode.illegalRe = langRe(mode.illegal);
+ if (mode.relevance == null)
+ mode.relevance = 1;
+ if (!mode.contains) {
+ mode.contains = [];
+ }
+ var expanded_contains = [];
+ mode.contains.forEach(function(c) {
+ if (c.variants) {
+ c.variants.forEach(function(v) {expanded_contains.push(inherit(c, v));});
+ } else {
+ expanded_contains.push(c === 'self' ? mode : c);
+ }
+ });
+ mode.contains = expanded_contains;
+ mode.contains.forEach(function(c) {compileMode(c, mode);});
+
+ if (mode.starts) {
+ compileMode(mode.starts, parent);
+ }
+
+ var terminators =
+ mode.contains.map(function(c) {
+ return c.beginKeywords ? '\\.?(' + c.begin + ')\\.?' : c.begin;
+ })
+ .concat([mode.terminator_end, mode.illegal])
+ .map(reStr)
+ .filter(Boolean);
+ mode.terminators = terminators.length ? langRe(terminators.join('|'), true) : {exec: function(/*s*/) {return null;}};
+ }
+
+ compileMode(language);
+ }
+
+ /*
+ Core highlighting function. Accepts a language name, or an alias, and a
+ string with the code to highlight. Returns an object with the following
+ properties:
+
+ - relevance (int)
+ - value (an HTML string with highlighting markup)
+
+ */
+ function highlight(name, value, ignore_illegals, continuation) {
+
+ function subMode(lexeme, mode) {
+ for (var i = 0; i < mode.contains.length; i++) {
+ if (testRe(mode.contains[i].beginRe, lexeme)) {
+ return mode.contains[i];
+ }
+ }
+ }
+
+ function endOfMode(mode, lexeme) {
+ if (testRe(mode.endRe, lexeme)) {
+ while (mode.endsParent && mode.parent) {
+ mode = mode.parent;
+ }
+ return mode;
+ }
+ if (mode.endsWithParent) {
+ return endOfMode(mode.parent, lexeme);
+ }
+ }
+
+ function isIllegal(lexeme, mode) {
+ return !ignore_illegals && testRe(mode.illegalRe, lexeme);
+ }
+
+ function keywordMatch(mode, match) {
+ var match_str = language.case_insensitive ? match[0].toLowerCase() : match[0];
+ return mode.keywords.hasOwnProperty(match_str) && mode.keywords[match_str];
+ }
+
+ function buildSpan(classname, insideSpan, leaveOpen, noPrefix) {
+ var classPrefix = noPrefix ? '' : options.classPrefix,
+ openSpan = '<span class="' + classPrefix,
+ closeSpan = leaveOpen ? '' : spanEndTag
+
+ openSpan += classname + '">';
+
+ return openSpan + insideSpan + closeSpan;
+ }
+
+ function processKeywords() {
+ var keyword_match, last_index, match, result;
+
+ if (!top.keywords)
+ return escape(mode_buffer);
+
+ result = '';
+ last_index = 0;
+ top.lexemesRe.lastIndex = 0;
+ match = top.lexemesRe.exec(mode_buffer);
+
+ while (match) {
+ result += escape(mode_buffer.substr(last_index, match.index - last_index));
+ keyword_match = keywordMatch(top, match);
+ if (keyword_match) {
+ relevance += keyword_match[1];
+ result += buildSpan(keyword_match[0], escape(match[0]));
+ } else {
+ result += escape(match[0]);
+ }
+ last_index = top.lexemesRe.lastIndex;
+ match = top.lexemesRe.exec(mode_buffer);
+ }
+ return result + escape(mode_buffer.substr(last_index));
+ }
+
+ function processSubLanguage() {
+ var explicit = typeof top.subLanguage === 'string';
+ if (explicit && !languages[top.subLanguage]) {
+ return escape(mode_buffer);
+ }
+
+ var result = explicit ?
+ highlight(top.subLanguage, mode_buffer, true, continuations[top.subLanguage]) :
+ highlightAuto(mode_buffer, top.subLanguage.length ? top.subLanguage : undefined);
+
+ // Counting embedded language score towards the host language may be disabled
+ // with zeroing the containing mode relevance. Usecase in point is Markdown that
+ // allows XML everywhere and makes every XML snippet to have a much larger Markdown
+ // score.
+ if (top.relevance > 0) {
+ relevance += result.relevance;
+ }
+ if (explicit) {
+ continuations[top.subLanguage] = result.top;
+ }
+ return buildSpan(result.language, result.value, false, true);
+ }
+
+ function processBuffer() {
+ result += (top.subLanguage != null ? processSubLanguage() : processKeywords());
+ mode_buffer = '';
+ }
+
+ function startNewMode(mode) {
+ result += mode.className? buildSpan(mode.className, '', true): '';
+ top = Object.create(mode, {parent: {value: top}});
+ }
+
+ function processLexeme(buffer, lexeme) {
+
+ mode_buffer += buffer;
+
+ if (lexeme == null) {
+ processBuffer();
+ return 0;
+ }
+
+ var new_mode = subMode(lexeme, top);
+ if (new_mode) {
+ if (new_mode.skip) {
+ mode_buffer += lexeme;
+ } else {
+ if (new_mode.excludeBegin) {
+ mode_buffer += lexeme;
+ }
+ processBuffer();
+ if (!new_mode.returnBegin && !new_mode.excludeBegin) {
+ mode_buffer = lexeme;
+ }
+ }
+ startNewMode(new_mode, lexeme);
+ return new_mode.returnBegin ? 0 : lexeme.length;
+ }
+
+ var end_mode = endOfMode(top, lexeme);
+ if (end_mode) {
+ var origin = top;
+ if (origin.skip) {
+ mode_buffer += lexeme;
+ } else {
+ if (!(origin.returnEnd || origin.excludeEnd)) {
+ mode_buffer += lexeme;
+ }
+ processBuffer();
+ if (origin.excludeEnd) {
+ mode_buffer = lexeme;
+ }
+ }
+ do {
+ if (top.className) {
+ result += spanEndTag;
+ }
+ if (!top.skip) {
+ relevance += top.relevance;
+ }
+ top = top.parent;
+ } while (top !== end_mode.parent);
+ if (end_mode.starts) {
+ startNewMode(end_mode.starts, '');
+ }
+ return origin.returnEnd ? 0 : lexeme.length;
+ }
+
+ if (isIllegal(lexeme, top))
+ throw new Error('Illegal lexeme "' + lexeme + '" for mode "' + (top.className || '<unnamed>') + '"');
+
+ /*
+ Parser should not reach this point as all types of lexemes should be caught
+ earlier, but if it does due to some bug make sure it advances at least one
+ character forward to prevent infinite looping.
+ */
+ mode_buffer += lexeme;
+ return lexeme.length || 1;
+ }
+
+ var language = getLanguage(name);
+ if (!language) {
+ throw new Error('Unknown language: "' + name + '"');
+ }
+
+ compileLanguage(language);
+ var top = continuation || language;
+ var continuations = {}; // keep continuations for sub-languages
+ var result = '', current;
+ for(current = top; current !== language; current = current.parent) {
+ if (current.className) {
+ result = buildSpan(current.className, '', true) + result;
+ }
+ }
+ var mode_buffer = '';
+ var relevance = 0;
+ try {
+ var match, count, index = 0;
+ while (true) {
+ top.terminators.lastIndex = index;
+ match = top.terminators.exec(value);
+ if (!match)
+ break;
+ count = processLexeme(value.substr(index, match.index - index), match[0]);
+ index = match.index + count;
+ }
+ processLexeme(value.substr(index));
+ for(current = top; current.parent; current = current.parent) { // close dangling modes
+ if (current.className) {
+ result += spanEndTag;
+ }
+ }
+ return {
+ relevance: relevance,
+ value: result,
+ language: name,
+ top: top
+ };
+ } catch (e) {
+ if (e.message && e.message.indexOf('Illegal') !== -1) {
+ return {
+ relevance: 0,
+ value: escape(value)
+ };
+ } else {
+ throw e;
+ }
+ }
+ }
+
+ /*
+ Highlighting with language detection. Accepts a string with the code to
+ highlight. Returns an object with the following properties:
+
+ - language (detected language)
+ - relevance (int)
+ - value (an HTML string with highlighting markup)
+ - second_best (object with the same structure for second-best heuristically
+ detected language, may be absent)
+
+ */
+ function highlightAuto(text, languageSubset) {
+ languageSubset = languageSubset || options.languages || objectKeys(languages);
+ var result = {
+ relevance: 0,
+ value: escape(text)
+ };
+ var second_best = result;
+ languageSubset.filter(getLanguage).forEach(function(name) {
+ var current = highlight(name, text, false);
+ current.language = name;
+ if (current.relevance > second_best.relevance) {
+ second_best = current;
+ }
+ if (current.relevance > result.relevance) {
+ second_best = result;
+ result = current;
+ }
+ });
+ if (second_best.language) {
+ result.second_best = second_best;
+ }
+ return result;
+ }
+
+ /*
+ Post-processing of the highlighted markup:
+
+ - replace TABs with something more useful
+ - replace real line-breaks with '<br>' for non-pre containers
+
+ */
+ function fixMarkup(value) {
+ return !(options.tabReplace || options.useBR)
+ ? value
+ : value.replace(fixMarkupRe, function(match, p1) {
+ if (options.useBR && match === '\n') {
+ return '<br>';
+ } else if (options.tabReplace) {
+ return p1.replace(/\t/g, options.tabReplace);
+ }
+ });
+ }
+
+ function buildClassName(prevClassName, currentLang, resultLang) {
+ var language = currentLang ? aliases[currentLang] : resultLang,
+ result = [prevClassName.trim()];
+
+ if (!prevClassName.match(/\bhljs\b/)) {
+ result.push('hljs');
+ }
+
+ if (prevClassName.indexOf(language) === -1) {
+ result.push(language);
+ }
+
+ return result.join(' ').trim();
+ }
+
+ /*
+ Applies highlighting to a DOM node containing code. Accepts a DOM node and
+ two optional parameters for fixMarkup.
+ */
+ function highlightBlock(block) {
+ var node, originalStream, result, resultNode, text;
+ var language = blockLanguage(block);
+
+ if (isNotHighlighted(language))
+ return;
+
+ if (options.useBR) {
+ node = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');
+ node.innerHTML = block.innerHTML.replace(/\n/g, '').replace(/<br[ \/]*>/g, '\n');
+ } else {
+ node = block;
+ }
+ text = node.textContent;
+ result = language ? highlight(language, text, true) : highlightAuto(text);
+
+ originalStream = nodeStream(node);
+ if (originalStream.length) {
+ resultNode = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');
+ resultNode.innerHTML = result.value;
+ result.value = mergeStreams(originalStream, nodeStream(resultNode), text);
+ }
+ result.value = fixMarkup(result.value);
+
+ block.innerHTML = result.value;
+ block.className = buildClassName(block.className, language, result.language);
+ block.result = {
+ language: result.language,
+ re: result.relevance
+ };
+ if (result.second_best) {
+ block.second_best = {
+ language: result.second_best.language,
+ re: result.second_best.relevance
+ };
+ }
+ }
+
+ /*
+ Updates highlight.js global options with values passed in the form of an object.
+ */
+ function configure(user_options) {
+ options = inherit(options, user_options);
+ }
+
+ /*
+ Applies highlighting to all <pre><code>..</code></pre> blocks on a page.
+ */
+ function initHighlighting() {
+ if (initHighlighting.called)
+ return;
+ initHighlighting.called = true;
+
+ var blocks = document.querySelectorAll('pre code');
+ ArrayProto.forEach.call(blocks, highlightBlock);
+ }
+
+ /*
+ Attaches highlighting to the page load event.
+ */
+ function initHighlightingOnLoad() {
+ addEventListener('DOMContentLoaded', initHighlighting, false);
+ addEventListener('load', initHighlighting, false);
+ }
+
+ function registerLanguage(name, language) {
+ var lang = languages[name] = language(hljs);
+ if (lang.aliases) {
+ lang.aliases.forEach(function(alias) {aliases[alias] = name;});
+ }
+ }
+
+ function listLanguages() {
+ return objectKeys(languages);
+ }
+
+ function getLanguage(name) {
+ name = (name || '').toLowerCase();
+ return languages[name] || languages[aliases[name]];
+ }
+
+ /* Interface definition */
+
+ hljs.highlight = highlight;
+ hljs.highlightAuto = highlightAuto;
+ hljs.fixMarkup = fixMarkup;
+ hljs.highlightBlock = highlightBlock;
+ hljs.configure = configure;
+ hljs.initHighlighting = initHighlighting;
+ hljs.initHighlightingOnLoad = initHighlightingOnLoad;
+ hljs.registerLanguage = registerLanguage;
+ hljs.listLanguages = listLanguages;
+ hljs.getLanguage = getLanguage;
+ hljs.inherit = inherit;
+
+ // Common regexps
+ hljs.IDENT_RE = '[a-zA-Z]\\w*';
+ hljs.UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\w*';
+ hljs.NUMBER_RE = '\\b\\d+(\\.\\d+)?';
+ hljs.C_NUMBER_RE = '(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)'; // 0x..., 0..., decimal, float
+ hljs.BINARY_NUMBER_RE = '\\b(0b[01]+)'; // 0b...
+ hljs.RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~';
+
+ // Common modes
+ hljs.BACKSLASH_ESCAPE = {
+ begin: '\\\\[\\s\\S]', relevance: 0
+ };
+ hljs.APOS_STRING_MODE = {
+ className: 'string',
+ begin: '\'', end: '\'',
+ illegal: '\\n',
+ contains: [hljs.BACKSLASH_ESCAPE]
+ };
+ hljs.QUOTE_STRING_MODE = {
+ className: 'string',
+ begin: '"', end: '"',
+ illegal: '\\n',
+ contains: [hljs.BACKSLASH_ESCAPE]
+ };
+ hljs.PHRASAL_WORDS_MODE = {
+ begin: /\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|like)\b/
+ };
+ hljs.COMMENT = function (begin, end, inherits) {
+ var mode = hljs.inherit(
+ {
+ className: 'comment',
+ begin: begin, end: end,
+ contains: []
+ },
+ inherits || {}
+ );
+ mode.contains.push(hljs.PHRASAL_WORDS_MODE);
+ mode.contains.push({
+ className: 'doctag',
+ begin: '(?:TODO|FIXME|NOTE|BUG|XXX):',
+ relevance: 0
+ });
+ return mode;
+ };
+ hljs.C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$');
+ hljs.C_BLOCK_COMMENT_MODE = hljs.COMMENT('/\\*', '\\*/');
+ hljs.HASH_COMMENT_MODE = hljs.COMMENT('#', '$');
+ hljs.NUMBER_MODE = {
+ className: 'number',
+ begin: hljs.NUMBER_RE,
+ relevance: 0
+ };
+ hljs.C_NUMBER_MODE = {
+ className: 'number',
+ begin: hljs.C_NUMBER_RE,
+ relevance: 0
+ };
+ hljs.BINARY_NUMBER_MODE = {
+ className: 'number',
+ begin: hljs.BINARY_NUMBER_RE,
+ relevance: 0
+ };
+ hljs.CSS_NUMBER_MODE = {
+ className: 'number',
+ begin: hljs.NUMBER_RE + '(' +
+ '%|em|ex|ch|rem' +
+ '|vw|vh|vmin|vmax' +
+ '|cm|mm|in|pt|pc|px' +
+ '|deg|grad|rad|turn' +
+ '|s|ms' +
+ '|Hz|kHz' +
+ '|dpi|dpcm|dppx' +
+ ')?',
+ relevance: 0
+ };
+ hljs.REGEXP_MODE = {
+ className: 'regexp',
+ begin: /\//, end: /\/[gimuy]*/,
+ illegal: /\n/,
+ contains: [
+ hljs.BACKSLASH_ESCAPE,
+ {
+ begin: /\[/, end: /\]/,
+ relevance: 0,
+ contains: [hljs.BACKSLASH_ESCAPE]
+ }
+ ]
+ };
+ hljs.TITLE_MODE = {
+ className: 'title',
+ begin: hljs.IDENT_RE,
+ relevance: 0
+ };
+ hljs.UNDERSCORE_TITLE_MODE = {
+ className: 'title',
+ begin: hljs.UNDERSCORE_IDENT_RE,
+ relevance: 0
+ };
+ hljs.METHOD_GUARD = {
+ // excludes method names from keyword processing
+ begin: '\\.\\s*' + hljs.UNDERSCORE_IDENT_RE,
+ relevance: 0
+ };
+
+ return hljs;
+}));
+
+hljs.registerLanguage("1c",
+/*
+Language: 1C
+Author: Yuri Ivanov <ivanov@supersoft.ru>
+Contributors: Sergey Baranov <segyrn@yandex.ru>
+Category: enterprise
+*/
+
+function(hljs){
+ var IDENT_RE_RU = '[a-zA-Zа-яА-Я][a-zA-Z0-9_а-яА-Я]*';
+ var OneS_KEYWORDS = 'возврат дата для если и или иначе иначеесли исключение конецесли ' +
+ 'конецпопытки конецпроцедуры конецфункции конеццикла константа не перейти перем ' +
+ 'перечисление по пока попытка прервать продолжить процедура строка тогда фс функция цикл ' +
+ 'число экспорт';
+ var OneS_BUILT_IN = 'ansitooem oemtoansi ввестивидсубконто ввестидату ввестизначение ' +
+ 'ввестиперечисление ввестипериод ввестиплансчетов ввестистроку ввестичисло вопрос ' +
+ 'восстановитьзначение врег выбранныйплансчетов вызватьисключение датагод датамесяц ' +
+ 'датачисло добавитьмесяц завершитьработусистемы заголовоксистемы записьжурналарегистрации ' +
+ 'запуститьприложение зафиксироватьтранзакцию значениевстроку значениевстрокувнутр ' +
+ 'значениевфайл значениеизстроки значениеизстрокивнутр значениеизфайла имякомпьютера ' +
+ 'имяпользователя каталогвременныхфайлов каталогиб каталогпользователя каталогпрограммы ' +
+ 'кодсимв командасистемы конгода конецпериодаби конецрассчитанногопериодаби ' +
+ 'конецстандартногоинтервала конквартала конмесяца коннедели лев лог лог10 макс ' +
+ 'максимальноеколичествосубконто мин монопольныйрежим названиеинтерфейса названиенабораправ ' +
+ 'назначитьвид назначитьсчет найти найтипомеченныенаудаление найтиссылки началопериодаби ' +
+ 'началостандартногоинтервала начатьтранзакцию начгода начквартала начмесяца начнедели ' +
+ 'номерднягода номерднянедели номернеделигода нрег обработкаожидания окр описаниеошибки ' +
+ 'основнойжурналрасчетов основнойплансчетов основнойязык открытьформу открытьформумодально ' +
+ 'отменитьтранзакцию очиститьокносообщений периодстр полноеимяпользователя получитьвремята ' +
+ 'получитьдатута получитьдокументта получитьзначенияотбора получитьпозициюта ' +
+ 'получитьпустоезначение получитьта прав праводоступа предупреждение префиксавтонумерации ' +
+ 'пустаястрока пустоезначение рабочаядаттьпустоезначение рабочаядата разделительстраниц ' +
+ 'разделительстрок разм разобратьпозициюдокумента рассчитатьрегистрына ' +
+ 'рассчитатьрегистрыпо сигнал симв символтабуляции создатьобъект сокрл сокрлп сокрп ' +
+ 'сообщить состояние сохранитьзначение сред статусвозврата стрдлина стрзаменить ' +
+ 'стрколичествострок стрполучитьстроку стрчисловхождений сформироватьпозициюдокумента ' +
+ 'счетпокоду текущаядата текущеевремя типзначения типзначениястр удалитьобъекты ' +
+ 'установитьтана установитьтапо фиксшаблон формат цел шаблон';
+ var DQUOTE = {begin: '""'};
+ var STR_START = {
+ className: 'string',
+ begin: '"', end: '"|$',
+ contains: [DQUOTE]
+ };
+ var STR_CONT = {
+ className: 'string',
+ begin: '\\|', end: '"|$',
+ contains: [DQUOTE]
+ };
+
+ return {
+ case_insensitive: true,
+ lexemes: IDENT_RE_RU,
+ keywords: {keyword: OneS_KEYWORDS, built_in: OneS_BUILT_IN},
+ contains: [
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.NUMBER_MODE,
+ STR_START, STR_CONT,
+ {
+ className: 'function',
+ begin: '(процедура|функция)', end: '$',
+ lexemes: IDENT_RE_RU,
+ keywords: 'процедура функция',
+ contains: [
+ {
+ begin: 'экспорт', endsWithParent: true,
+ lexemes: IDENT_RE_RU,
+ keywords: 'экспорт',
+ contains: [hljs.C_LINE_COMMENT_MODE]
+ },
+ {
+ className: 'params',
+ begin: '\\(', end: '\\)',
+ lexemes: IDENT_RE_RU,
+ keywords: 'знач',
+ contains: [STR_START, STR_CONT]
+ },
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.inherit(hljs.TITLE_MODE, {begin: IDENT_RE_RU})
+ ]
+ },
+ {className: 'meta', begin: '#', end: '$'},
+ {className: 'number', begin: '\'\\d{2}\\.\\d{2}\\.(\\d{2}|\\d{4})\''} // date
+ ]
+ };
+});
+
+hljs.registerLanguage("accesslog",
+/*
+ Language: Access log
+ Author: Oleg Efimov <efimovov@gmail.com>
+ Description: Apache/Nginx Access Logs
+ */
+
+function(hljs) {
+ return {
+ contains: [
+ // IP
+ {
+ className: 'number',
+ begin: '\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b'
+ },
+ // Other numbers
+ {
+ className: 'number',
+ begin: '\\b\\d+\\b',
+ relevance: 0
+ },
+ // Requests
+ {
+ className: 'string',
+ begin: '"(GET|POST|HEAD|PUT|DELETE|CONNECT|OPTIONS|PATCH|TRACE)', end: '"',
+ keywords: 'GET POST HEAD PUT DELETE CONNECT OPTIONS PATCH TRACE',
+ illegal: '\\n',
+ relevance: 10
+ },
+ // Dates
+ {
+ className: 'string',
+ begin: /\[/, end: /\]/,
+ illegal: '\\n'
+ },
+ // Strings
+ {
+ className: 'string',
+ begin: '"', end: '"',
+ illegal: '\\n'
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("actionscript",
+/*
+Language: ActionScript
+Author: Alexander Myadzel <myadzel@gmail.com>
+Category: scripting
+*/
+
+function(hljs) {
+ var IDENT_RE = '[a-zA-Z_$][a-zA-Z0-9_$]*';
+ var IDENT_FUNC_RETURN_TYPE_RE = '([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)';
+
+ var AS3_REST_ARG_MODE = {
+ className: 'rest_arg',
+ begin: '[.]{3}', end: IDENT_RE,
+ relevance: 10
+ };
+
+ return {
+ aliases: ['as'],
+ keywords: {
+ keyword: 'as break case catch class const continue default delete do dynamic each ' +
+ 'else extends final finally for function get if implements import in include ' +
+ 'instanceof interface internal is namespace native new override package private ' +
+ 'protected public return set static super switch this throw try typeof use var void ' +
+ 'while with',
+ literal: 'true false null undefined'
+ },
+ contains: [
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.C_NUMBER_MODE,
+ {
+ className: 'class',
+ beginKeywords: 'package', end: '{',
+ contains: [hljs.TITLE_MODE]
+ },
+ {
+ className: 'class',
+ beginKeywords: 'class interface', end: '{', excludeEnd: true,
+ contains: [
+ {
+ beginKeywords: 'extends implements'
+ },
+ hljs.TITLE_MODE
+ ]
+ },
+ {
+ className: 'meta',
+ beginKeywords: 'import include', end: ';',
+ keywords: {'meta-keyword': 'import include'}
+ },
+ {
+ className: 'function',
+ beginKeywords: 'function', end: '[{;]', excludeEnd: true,
+ illegal: '\\S',
+ contains: [
+ hljs.TITLE_MODE,
+ {
+ className: 'params',
+ begin: '\\(', end: '\\)',
+ contains: [
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ AS3_REST_ARG_MODE
+ ]
+ },
+ {
+ begin: ':\\s*' + IDENT_FUNC_RETURN_TYPE_RE
+ }
+ ]
+ },
+ hljs.METHOD_GUARD
+ ],
+ illegal: /#/
+ };
+});
+
+hljs.registerLanguage("ada",
+/*
+Language: Ada
+Author: Lars Schulna <kartoffelbrei.mit.muskatnuss@gmail.org>
+Description: Ada is a general-purpose programming language that has great support for saftey critical and real-time applications.
+ It has been developed by the DoD and thus has been used in military and safety-critical applications (like civil aviation).
+ The first version appeared in the 80s, but it's still actively developed today with
+ the newest standard being Ada2012.
+*/
+
+// We try to support full Ada2012
+//
+// We highlight all appearances of types, keywords, literals (string, char, number, bool)
+// and titles (user defined function/procedure/package)
+// CSS classes are set accordingly
+//
+// Languages causing problems for language detection:
+// xml (broken by Foo : Bar type), elm (broken by Foo : Bar type), vbscript-html (broken by body keyword)
+// sql (ada default.txt has a lot of sql keywords)
+
+function(hljs) {
+ // Regular expression for Ada numeric literals.
+ // stolen form the VHDL highlighter
+
+ // Decimal literal:
+ var INTEGER_RE = '\\d(_|\\d)*';
+ var EXPONENT_RE = '[eE][-+]?' + INTEGER_RE;
+ var DECIMAL_LITERAL_RE = INTEGER_RE + '(\\.' + INTEGER_RE + ')?' + '(' + EXPONENT_RE + ')?';
+
+ // Based literal:
+ var BASED_INTEGER_RE = '\\w+';
+ var BASED_LITERAL_RE = INTEGER_RE + '#' + BASED_INTEGER_RE + '(\\.' + BASED_INTEGER_RE + ')?' + '#' + '(' + EXPONENT_RE + ')?';
+
+ var NUMBER_RE = '\\b(' + BASED_LITERAL_RE + '|' + DECIMAL_LITERAL_RE + ')';
+
+ // Identifier regex
+ var ID_REGEX = '[A-Za-z](_?[A-Za-z0-9.])*';
+
+ // bad chars, only allowed in literals
+ var BAD_CHARS = '[]{}%#\'\"'
+
+ // Ada doesn't have block comments, only line comments
+ var COMMENTS = hljs.COMMENT('--', '$');
+
+ // variable declarations of the form
+ // Foo : Bar := Baz;
+ // where only Bar will be highlighted
+ var VAR_DECLS = {
+ // TODO: These spaces are not required by the Ada syntax
+ // however, I have yet to see handwritten Ada code where
+ // someone does not put spaces around :
+ begin: '\\s+:\\s+', end: '\\s*(:=|;|\\)|=>|$)',
+ // endsWithParent: true,
+ // returnBegin: true,
+ illegal: BAD_CHARS,
+ contains: [
+ {
+ // workaround to avoid highlighting
+ // named loops and declare blocks
+ beginKeywords: 'loop for declare others',
+ endsParent: true,
+ },
+ {
+ // properly highlight all modifiers
+ className: 'keyword',
+ beginKeywords: 'not null constant access function procedure in out aliased exception'
+ },
+ {
+ className: 'type',
+ begin: ID_REGEX,
+ endsParent: true,
+ relevance: 0,
+ }
+ ]
+ };
+
+ return {
+ case_insensitive: true,
+ keywords: {
+ keyword:
+ 'abort else new return abs elsif not reverse abstract end ' +
+ 'accept entry select access exception of separate aliased exit or some ' +
+ 'all others subtype and for out synchronized array function overriding ' +
+ 'at tagged generic package task begin goto pragma terminate ' +
+ 'body private then if procedure type case in protected constant interface ' +
+ 'is raise use declare range delay limited record when delta loop rem while ' +
+ 'digits renames with do mod requeue xor',
+ literal:
+ 'True False',
+ },
+ contains: [
+ COMMENTS,
+ // strings "foobar"
+ {
+ className: 'string',
+ begin: /"/, end: /"/,
+ contains: [{begin: /""/, relevance: 0}]
+ },
+ // characters ''
+ {
+ // character literals always contain one char
+ className: 'string',
+ begin: /'.'/
+ },
+ {
+ // number literals
+ className: 'number',
+ begin: NUMBER_RE,
+ relevance: 0
+ },
+ {
+ // Attributes
+ className: 'symbol',
+ begin: "'" + ID_REGEX,
+ },
+ {
+ // package definition, maybe inside generic
+ className: 'title',
+ begin: '(\\bwith\\s+)?(\\bprivate\\s+)?\\bpackage\\s+(\\bbody\\s+)?', end: '(is|$)',
+ keywords: 'package body',
+ excludeBegin: true,
+ excludeEnd: true,
+ illegal: BAD_CHARS
+ },
+ {
+ // function/procedure declaration/definition
+ // maybe inside generic
+ begin: '(\\b(with|overriding)\\s+)?\\b(function|procedure)\\s+', end: '(\\bis|\\bwith|\\brenames|\\)\\s*;)',
+ keywords: 'overriding function procedure with is renames return',
+ // we need to re-match the 'function' keyword, so that
+ // the title mode below matches only exactly once
+ returnBegin: true,
+ contains:
+ [
+ COMMENTS,
+ {
+ // name of the function/procedure
+ className: 'title',
+ begin: '(\\bwith\\s+)?\\b(function|procedure)\\s+',
+ end: '(\\(|\\s+|$)',
+ excludeBegin: true,
+ excludeEnd: true,
+ illegal: BAD_CHARS
+ },
+ // 'self'
+ // // parameter types
+ VAR_DECLS,
+ {
+ // return type
+ className: 'type',
+ begin: '\\breturn\\s+', end: '(\\s+|;|$)',
+ keywords: 'return',
+ excludeBegin: true,
+ excludeEnd: true,
+ // we are done with functions
+ endsParent: true,
+ illegal: BAD_CHARS
+
+ },
+ ]
+ },
+ {
+ // new type declarations
+ // maybe inside generic
+ className: 'type',
+ begin: '\\b(sub)?type\\s+', end: '\\s+',
+ keywords: 'type',
+ excludeBegin: true,
+ illegal: BAD_CHARS
+ },
+
+ // see comment above the definition
+ VAR_DECLS,
+
+ // no markup
+ // relevance boosters for small snippets
+ // {begin: '\\s*=>\\s*'},
+ // {begin: '\\s*:=\\s*'},
+ // {begin: '\\s+:=\\s+'},
+ ]
+ };
+});
+
+hljs.registerLanguage("apache",
+/*
+Language: Apache
+Author: Ruslan Keba <rukeba@gmail.com>
+Contributors: Ivan Sagalaev <maniac@softwaremaniacs.org>
+Website: http://rukeba.com/
+Description: language definition for Apache configuration files (httpd.conf & .htaccess)
+Category: common, config
+*/
+
+function(hljs) {
+ var NUMBER = {className: 'number', begin: '[\\$%]\\d+'};
+ return {
+ aliases: ['apacheconf'],
+ case_insensitive: true,
+ contains: [
+ hljs.HASH_COMMENT_MODE,
+ {className: 'section', begin: '</?', end: '>'},
+ {
+ className: 'attribute',
+ begin: /\w+/,
+ relevance: 0,
+ // keywords aren’t needed for highlighting per se, they only boost relevance
+ // for a very generally defined mode (starts with a word, ends with line-end
+ keywords: {
+ nomarkup:
+ 'order deny allow setenv rewriterule rewriteengine rewritecond documentroot ' +
+ 'sethandler errordocument loadmodule options header listen serverroot ' +
+ 'servername'
+ },
+ starts: {
+ end: /$/,
+ relevance: 0,
+ keywords: {
+ literal: 'on off all'
+ },
+ contains: [
+ {
+ className: 'meta',
+ begin: '\\s\\[', end: '\\]$'
+ },
+ {
+ className: 'variable',
+ begin: '[\\$%]\\{', end: '\\}',
+ contains: ['self', NUMBER]
+ },
+ NUMBER,
+ hljs.QUOTE_STRING_MODE
+ ]
+ }
+ }
+ ],
+ illegal: /\S/
+ };
+});
+
+hljs.registerLanguage("applescript",
+/*
+Language: AppleScript
+Authors: Nathan Grigg <nathan@nathanamy.org>, Dr. Drang <drdrang@gmail.com>
+Category: scripting
+*/
+
+function(hljs) {
+ var STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: ''});
+ var PARAMS = {
+ className: 'params',
+ begin: '\\(', end: '\\)',
+ contains: ['self', hljs.C_NUMBER_MODE, STRING]
+ };
+ var COMMENT_MODE_1 = hljs.COMMENT('--', '$');
+ var COMMENT_MODE_2 = hljs.COMMENT(
+ '\\(\\*',
+ '\\*\\)',
+ {
+ contains: ['self', COMMENT_MODE_1] //allow nesting
+ }
+ );
+ var COMMENTS = [
+ COMMENT_MODE_1,
+ COMMENT_MODE_2,
+ hljs.HASH_COMMENT_MODE
+ ];
+
+ return {
+ aliases: ['osascript'],
+ keywords: {
+ keyword:
+ 'about above after against and around as at back before beginning ' +
+ 'behind below beneath beside between but by considering ' +
+ 'contain contains continue copy div does eighth else end equal ' +
+ 'equals error every exit fifth first for fourth from front ' +
+ 'get given global if ignoring in into is it its last local me ' +
+ 'middle mod my ninth not of on onto or over prop property put ref ' +
+ 'reference repeat returning script second set seventh since ' +
+ 'sixth some tell tenth that the|0 then third through thru ' +
+ 'timeout times to transaction try until where while whose with ' +
+ 'without',
+ literal:
+ 'AppleScript false linefeed return pi quote result space tab true',
+ built_in:
+ 'alias application boolean class constant date file integer list ' +
+ 'number real record string text ' +
+ 'activate beep count delay launch log offset read round ' +
+ 'run say summarize write ' +
+ 'character characters contents day frontmost id item length ' +
+ 'month name paragraph paragraphs rest reverse running time version ' +
+ 'weekday word words year'
+ },
+ contains: [
+ STRING,
+ hljs.C_NUMBER_MODE,
+ {
+ className: 'built_in',
+ begin:
+ '\\b(clipboard info|the clipboard|info for|list (disks|folder)|' +
+ 'mount volume|path to|(close|open for) access|(get|set) eof|' +
+ 'current date|do shell script|get volume settings|random number|' +
+ 'set volume|system attribute|system info|time to GMT|' +
+ '(load|run|store) script|scripting components|' +
+ 'ASCII (character|number)|localized string|' +
+ 'choose (application|color|file|file name|' +
+ 'folder|from list|remote application|URL)|' +
+ 'display (alert|dialog))\\b|^\\s*return\\b'
+ },
+ {
+ className: 'literal',
+ begin:
+ '\\b(text item delimiters|current application|missing value)\\b'
+ },
+ {
+ className: 'keyword',
+ begin:
+ '\\b(apart from|aside from|instead of|out of|greater than|' +
+ "isn't|(doesn't|does not) (equal|come before|come after|contain)|" +
+ '(greater|less) than( or equal)?|(starts?|ends|begins?) with|' +
+ 'contained by|comes (before|after)|a (ref|reference)|POSIX file|' +
+ 'POSIX path|(date|time) string|quoted form)\\b'
+ },
+ {
+ beginKeywords: 'on',
+ illegal: '[${=;\\n]',
+ contains: [hljs.UNDERSCORE_TITLE_MODE, PARAMS]
+ }
+ ].concat(COMMENTS),
+ illegal: '//|->|=>|\\[\\['
+ };
+});
+
+hljs.registerLanguage("cpp",
+/*
+Language: C++
+Author: Ivan Sagalaev <maniac@softwaremaniacs.org>
+Contributors: Evgeny Stepanischev <imbolk@gmail.com>, Zaven Muradyan <megalivoithos@gmail.com>, Roel Deckers <admin@codingcat.nl>
+Category: common, system
+*/
+
+function(hljs) {
+ var CPP_PRIMITIVE_TYPES = {
+ className: 'keyword',
+ begin: '\\b[a-z\\d_]*_t\\b'
+ };
+
+ var STRINGS = {
+ className: 'string',
+ variants: [
+ {
+ begin: '(u8?|U)?L?"', end: '"',
+ illegal: '\\n',
+ contains: [hljs.BACKSLASH_ESCAPE]
+ },
+ {
+ begin: '(u8?|U)?R"', end: '"',
+ contains: [hljs.BACKSLASH_ESCAPE]
+ },
+ {
+ begin: '\'\\\\?.', end: '\'',
+ illegal: '.'
+ }
+ ]
+ };
+
+ var NUMBERS = {
+ className: 'number',
+ variants: [
+ { begin: '\\b(0b[01\'_]+)' },
+ { begin: '\\b([\\d\'_]+(\\.[\\d\'_]*)?|\\.[\\d\'_]+)(u|U|l|L|ul|UL|f|F|b|B)' },
+ { begin: '(-?)(\\b0[xX][a-fA-F0-9\'_]+|(\\b[\\d\'_]+(\\.[\\d\'_]*)?|\\.[\\d\'_]+)([eE][-+]?[\\d\'_]+)?)' }
+ ],
+ relevance: 0
+ };
+
+ var PREPROCESSOR = {
+ className: 'meta',
+ begin: /#\s*[a-z]+\b/, end: /$/,
+ keywords: {
+ 'meta-keyword':
+ 'if else elif endif define undef warning error line ' +
+ 'pragma ifdef ifndef include'
+ },
+ contains: [
+ {
+ begin: /\\\n/, relevance: 0
+ },
+ hljs.inherit(STRINGS, {className: 'meta-string'}),
+ {
+ className: 'meta-string',
+ begin: '<', end: '>',
+ illegal: '\\n',
+ },
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE
+ ]
+ };
+
+ var FUNCTION_TITLE = hljs.IDENT_RE + '\\s*\\(';
+
+ var CPP_KEYWORDS = {
+ keyword: 'int float while private char catch export virtual operator sizeof ' +
+ 'dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace ' +
+ 'unsigned long volatile static protected bool template mutable if public friend ' +
+ 'do goto auto void enum else break extern using class asm case typeid ' +
+ 'short reinterpret_cast|10 default double register explicit signed typename try this ' +
+ 'switch continue inline delete alignof constexpr decltype ' +
+ 'noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary ' +
+ 'atomic_bool atomic_char atomic_schar ' +
+ 'atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong ' +
+ 'atomic_ullong new throw return',
+ built_in: 'std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream ' +
+ 'auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set ' +
+ 'unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos ' +
+ 'asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp ' +
+ 'fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper ' +
+ 'isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow ' +
+ 'printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp ' +
+ 'strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan ' +
+ 'vfprintf vprintf vsprintf endl initializer_list unique_ptr',
+ literal: 'true false nullptr NULL'
+ };
+
+ var EXPRESSION_CONTAINS = [
+ CPP_PRIMITIVE_TYPES,
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ NUMBERS,
+ STRINGS
+ ];
+
+ return {
+ aliases: ['c', 'cc', 'h', 'c++', 'h++', 'hpp'],
+ keywords: CPP_KEYWORDS,
+ illegal: '</',
+ contains: EXPRESSION_CONTAINS.concat([
+ PREPROCESSOR,
+ {
+ begin: '\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<', end: '>',
+ keywords: CPP_KEYWORDS,
+ contains: ['self', CPP_PRIMITIVE_TYPES]
+ },
+ {
+ begin: hljs.IDENT_RE + '::',
+ keywords: CPP_KEYWORDS
+ },
+ {
+ // This mode covers expression context where we can't expect a function
+ // definition and shouldn't highlight anything that looks like one:
+ // `return some()`, `else if()`, `(x*sum(1, 2))`
+ variants: [
+ {begin: /=/, end: /;/},
+ {begin: /\(/, end: /\)/},
+ {beginKeywords: 'new throw return else', end: /;/}
+ ],
+ keywords: CPP_KEYWORDS,
+ contains: EXPRESSION_CONTAINS.concat([
+ {
+ begin: /\(/, end: /\)/,
+ keywords: CPP_KEYWORDS,
+ contains: EXPRESSION_CONTAINS.concat(['self']),
+ relevance: 0
+ }
+ ]),
+ relevance: 0
+ },
+ {
+ className: 'function',
+ begin: '(' + hljs.IDENT_RE + '[\\*&\\s]+)+' + FUNCTION_TITLE,
+ returnBegin: true, end: /[{;=]/,
+ excludeEnd: true,
+ keywords: CPP_KEYWORDS,
+ illegal: /[^\w\s\*&]/,
+ contains: [
+ {
+ begin: FUNCTION_TITLE, returnBegin: true,
+ contains: [hljs.TITLE_MODE],
+ relevance: 0
+ },
+ {
+ className: 'params',
+ begin: /\(/, end: /\)/,
+ keywords: CPP_KEYWORDS,
+ relevance: 0,
+ contains: [
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ STRINGS,
+ NUMBERS,
+ CPP_PRIMITIVE_TYPES
+ ]
+ },
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ PREPROCESSOR
+ ]
+ }
+ ]),
+ exports: {
+ preprocessor: PREPROCESSOR,
+ strings: STRINGS,
+ keywords: CPP_KEYWORDS
+ }
+ };
+});
+
+hljs.registerLanguage("arduino",
+/*
+Language: Arduino
+Author: Stefania Mellai <s.mellai@arduino.cc>
+Description: The Arduino® Language is a superset of C++. This rules are designed to highlight the Arduino® source code. For info about language see http://www.arduino.cc.
+Requires: cpp.js
+*/
+
+function(hljs) {
+ var CPP = hljs.getLanguage('cpp').exports;
+ return {
+ keywords: {
+ keyword:
+ 'boolean byte word string String array ' + CPP.keywords.keyword,
+ built_in:
+ 'setup loop while catch for if do goto try switch case else ' +
+ 'default break continue return ' +
+ 'KeyboardController MouseController SoftwareSerial ' +
+ 'EthernetServer EthernetClient LiquidCrystal ' +
+ 'RobotControl GSMVoiceCall EthernetUDP EsploraTFT ' +
+ 'HttpClient RobotMotor WiFiClient GSMScanner ' +
+ 'FileSystem Scheduler GSMServer YunClient YunServer ' +
+ 'IPAddress GSMClient GSMModem Keyboard Ethernet ' +
+ 'Console GSMBand Esplora Stepper Process ' +
+ 'WiFiUDP GSM_SMS Mailbox USBHost Firmata PImage ' +
+ 'Client Server GSMPIN FileIO Bridge Serial ' +
+ 'EEPROM Stream Mouse Audio Servo File Task ' +
+ 'GPRS WiFi Wire TFT GSM SPI SD ' +
+ 'runShellCommandAsynchronously analogWriteResolution ' +
+ 'retrieveCallingNumber printFirmwareVersion ' +
+ 'analogReadResolution sendDigitalPortPair ' +
+ 'noListenOnLocalhost readJoystickButton setFirmwareVersion ' +
+ 'readJoystickSwitch scrollDisplayRight getVoiceCallStatus ' +
+ 'scrollDisplayLeft writeMicroseconds delayMicroseconds ' +
+ 'beginTransmission getSignalStrength runAsynchronously ' +
+ 'getAsynchronously listenOnLocalhost getCurrentCarrier ' +
+ 'readAccelerometer messageAvailable sendDigitalPorts ' +
+ 'lineFollowConfig countryNameWrite runShellCommand ' +
+ 'readStringUntil rewindDirectory readTemperature ' +
+ 'setClockDivider readLightSensor endTransmission ' +
+ 'analogReference detachInterrupt countryNameRead ' +
+ 'attachInterrupt encryptionType readBytesUntil ' +
+ 'robotNameWrite readMicrophone robotNameRead cityNameWrite ' +
+ 'userNameWrite readJoystickY readJoystickX mouseReleased ' +
+ 'openNextFile scanNetworks noInterrupts digitalWrite ' +
+ 'beginSpeaker mousePressed isActionDone mouseDragged ' +
+ 'displayLogos noAutoscroll addParameter remoteNumber ' +
+ 'getModifiers keyboardRead userNameRead waitContinue ' +
+ 'processInput parseCommand printVersion readNetworks ' +
+ 'writeMessage blinkVersion cityNameRead readMessage ' +
+ 'setDataMode parsePacket isListening setBitOrder ' +
+ 'beginPacket isDirectory motorsWrite drawCompass ' +
+ 'digitalRead clearScreen serialEvent rightToLeft ' +
+ 'setTextSize leftToRight requestFrom keyReleased ' +
+ 'compassRead analogWrite interrupts WiFiServer ' +
+ 'disconnect playMelody parseFloat autoscroll ' +
+ 'getPINUsed setPINUsed setTimeout sendAnalog ' +
+ 'readSlider analogRead beginWrite createChar ' +
+ 'motorsStop keyPressed tempoWrite readButton ' +
+ 'subnetMask debugPrint macAddress writeGreen ' +
+ 'randomSeed attachGPRS readString sendString ' +
+ 'remotePort releaseAll mouseMoved background ' +
+ 'getXChange getYChange answerCall getResult ' +
+ 'voiceCall endPacket constrain getSocket writeJSON ' +
+ 'getButton available connected findUntil readBytes ' +
+ 'exitValue readGreen writeBlue startLoop IPAddress ' +
+ 'isPressed sendSysex pauseMode gatewayIP setCursor ' +
+ 'getOemKey tuneWrite noDisplay loadImage switchPIN ' +
+ 'onRequest onReceive changePIN playFile noBuffer ' +
+ 'parseInt overflow checkPIN knobRead beginTFT ' +
+ 'bitClear updateIR bitWrite position writeRGB ' +
+ 'highByte writeRed setSpeed readBlue noStroke ' +
+ 'remoteIP transfer shutdown hangCall beginSMS ' +
+ 'endWrite attached maintain noCursor checkReg ' +
+ 'checkPUK shiftOut isValid shiftIn pulseIn ' +
+ 'connect println localIP pinMode getIMEI ' +
+ 'display noBlink process getBand running beginSD ' +
+ 'drawBMP lowByte setBand release bitRead prepare ' +
+ 'pointTo readRed setMode noFill remove listen ' +
+ 'stroke detach attach noTone exists buffer ' +
+ 'height bitSet circle config cursor random ' +
+ 'IRread setDNS endSMS getKey micros ' +
+ 'millis begin print write ready flush width ' +
+ 'isPIN blink clear press mkdir rmdir close ' +
+ 'point yield image BSSID click delay ' +
+ 'read text move peek beep rect line open ' +
+ 'seek fill size turn stop home find ' +
+ 'step tone sqrt RSSI SSID ' +
+ 'end bit tan cos sin pow map abs max ' +
+ 'min get run put',
+ literal:
+ 'DIGITAL_MESSAGE FIRMATA_STRING ANALOG_MESSAGE ' +
+ 'REPORT_DIGITAL REPORT_ANALOG INPUT_PULLUP ' +
+ 'SET_PIN_MODE INTERNAL2V56 SYSTEM_RESET LED_BUILTIN ' +
+ 'INTERNAL1V1 SYSEX_START INTERNAL EXTERNAL ' +
+ 'DEFAULT OUTPUT INPUT HIGH LOW'
+ },
+ contains: [
+ CPP.preprocessor,
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.C_NUMBER_MODE
+ ]
+ };
+});
+
+hljs.registerLanguage("armasm",
+/*
+Language: ARM Assembly
+Author: Dan Panzarella <alsoelp@gmail.com>
+Description: ARM Assembly including Thumb and Thumb2 instructions
+Category: assembler
+*/
+
+function(hljs) {
+ //local labels: %?[FB]?[AT]?\d{1,2}\w+
+ return {
+ case_insensitive: true,
+ aliases: ['arm'],
+ lexemes: '\\.?' + hljs.IDENT_RE,
+ keywords: {
+ meta:
+ //GNU preprocs
+ '.2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg '+
+ //ARM directives
+ 'ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ',
+ built_in:
+ 'r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 '+ //standard registers
+ 'pc lr sp ip sl sb fp '+ //typical regs plus backward compatibility
+ 'a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 '+ //more regs and fp
+ 'p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 '+ //coprocessor regs
+ 'c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 '+ //more coproc
+ 'q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 '+ //advanced SIMD NEON regs
+
+ //program status registers
+ 'cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf '+
+ 'spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf '+
+
+ //NEON and VFP registers
+ 's0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 '+
+ 's16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 '+
+ 'd0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 '+
+ 'd16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 ' +
+
+ '{PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @'
+ },
+ contains: [
+ {
+ className: 'keyword',
+ begin: '\\b('+ //mnemonics
+ 'adc|'+
+ '(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|'+
+ 'and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|'+
+ 'bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|'+
+ 'setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|'+
+ 'ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|'+
+ 'mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|'+
+ 'mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|'+
+ 'mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|'+
+ 'rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|'+
+ 'stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|'+
+ '[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|'+
+ 'wfe|wfi|yield'+
+ ')'+
+ '(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?'+ //condition codes
+ '[sptrx]?' , //legal postfixes
+ end: '\\s'
+ },
+ hljs.COMMENT('[;@]', '$', {relevance: 0}),
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.QUOTE_STRING_MODE,
+ {
+ className: 'string',
+ begin: '\'',
+ end: '[^\\\\]\'',
+ relevance: 0
+ },
+ {
+ className: 'title',
+ begin: '\\|', end: '\\|',
+ illegal: '\\n',
+ relevance: 0
+ },
+ {
+ className: 'number',
+ variants: [
+ {begin: '[#$=]?0x[0-9a-f]+'}, //hex
+ {begin: '[#$=]?0b[01]+'}, //bin
+ {begin: '[#$=]\\d+'}, //literal
+ {begin: '\\b\\d+'} //bare number
+ ],
+ relevance: 0
+ },
+ {
+ className: 'symbol',
+ variants: [
+ {begin: '^[a-z_\\.\\$][a-z0-9_\\.\\$]+'}, //ARM syntax
+ {begin: '^\\s*[a-z_\\.\\$][a-z0-9_\\.\\$]+:'}, //GNU ARM syntax
+ {begin: '[=#]\\w+' } //label reference
+ ],
+ relevance: 0
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("xml",
+/*
+Language: HTML, XML
+Category: common
+*/
+
+function(hljs) {
+ var XML_IDENT_RE = '[A-Za-z0-9\\._:-]+';
+ var TAG_INTERNALS = {
+ endsWithParent: true,
+ illegal: /</,
+ relevance: 0,
+ contains: [
+ {
+ className: 'attr',
+ begin: XML_IDENT_RE,
+ relevance: 0
+ },
+ {
+ begin: /=\s*/,
+ relevance: 0,
+ contains: [
+ {
+ className: 'string',
+ endsParent: true,
+ variants: [
+ {begin: /"/, end: /"/},
+ {begin: /'/, end: /'/},
+ {begin: /[^\s"'=<>`]+/}
+ ]
+ }
+ ]
+ }
+ ]
+ };
+ return {
+ aliases: ['html', 'xhtml', 'rss', 'atom', 'xjb', 'xsd', 'xsl', 'plist'],
+ case_insensitive: true,
+ contains: [
+ {
+ className: 'meta',
+ begin: '<!DOCTYPE', end: '>',
+ relevance: 10,
+ contains: [{begin: '\\[', end: '\\]'}]
+ },
+ hljs.COMMENT(
+ '<!--',
+ '-->',
+ {
+ relevance: 10
+ }
+ ),
+ {
+ begin: '<\\!\\[CDATA\\[', end: '\\]\\]>',
+ relevance: 10
+ },
+ {
+ begin: /<\?(php)?/, end: /\?>/,
+ subLanguage: 'php',
+ contains: [{begin: '/\\*', end: '\\*/', skip: true}]
+ },
+ {
+ className: 'tag',
+ /*
+ The lookahead pattern (?=...) ensures that 'begin' only matches
+ '<style' as a single word, followed by a whitespace or an
+ ending braket. The '$' is needed for the lexeme to be recognized
+ by hljs.subMode() that tests lexemes outside the stream.
+ */
+ begin: '<style(?=\\s|>|$)', end: '>',
+ keywords: {name: 'style'},
+ contains: [TAG_INTERNALS],
+ starts: {
+ end: '</style>', returnEnd: true,
+ subLanguage: ['css', 'xml']
+ }
+ },
+ {
+ className: 'tag',
+ // See the comment in the <style tag about the lookahead pattern
+ begin: '<script(?=\\s|>|$)', end: '>',
+ keywords: {name: 'script'},
+ contains: [TAG_INTERNALS],
+ starts: {
+ end: '\<\/script\>', returnEnd: true,
+ subLanguage: ['actionscript', 'javascript', 'handlebars', 'xml']
+ }
+ },
+ {
+ className: 'meta',
+ variants: [
+ {begin: /<\?xml/, end: /\?>/, relevance: 10},
+ {begin: /<\?\w+/, end: /\?>/}
+ ]
+ },
+ {
+ className: 'tag',
+ begin: '</?', end: '/?>',
+ contains: [
+ {
+ className: 'name', begin: /[^\/><\s]+/, relevance: 0
+ },
+ TAG_INTERNALS
+ ]
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("asciidoc",
+/*
+Language: AsciiDoc
+Requires: xml.js
+Author: Dan Allen <dan.j.allen@gmail.com>
+Website: http://google.com/profiles/dan.j.allen
+Description: A semantic, text-based document format that can be exported to HTML, DocBook and other backends.
+Category: markup
+*/
+
+function(hljs) {
+ return {
+ aliases: ['adoc'],
+ contains: [
+ // block comment
+ hljs.COMMENT(
+ '^/{4,}\\n',
+ '\\n/{4,}$',
+ // can also be done as...
+ //'^/{4,}$',
+ //'^/{4,}$',
+ {
+ relevance: 10
+ }
+ ),
+ // line comment
+ hljs.COMMENT(
+ '^//',
+ '$',
+ {
+ relevance: 0
+ }
+ ),
+ // title
+ {
+ className: 'title',
+ begin: '^\\.\\w.*$'
+ },
+ // example, admonition & sidebar blocks
+ {
+ begin: '^[=\\*]{4,}\\n',
+ end: '\\n^[=\\*]{4,}$',
+ relevance: 10
+ },
+ // headings
+ {
+ className: 'section',
+ relevance: 10,
+ variants: [
+ {begin: '^(={1,5}) .+?( \\1)?$'},
+ {begin: '^[^\\[\\]\\n]+?\\n[=\\-~\\^\\+]{2,}$'},
+ ]
+ },
+ // document attributes
+ {
+ className: 'meta',
+ begin: '^:.+?:',
+ end: '\\s',
+ excludeEnd: true,
+ relevance: 10
+ },
+ // block attributes
+ {
+ className: 'meta',
+ begin: '^\\[.+?\\]$',
+ relevance: 0
+ },
+ // quoteblocks
+ {
+ className: 'quote',
+ begin: '^_{4,}\\n',
+ end: '\\n_{4,}$',
+ relevance: 10
+ },
+ // listing and literal blocks
+ {
+ className: 'code',
+ begin: '^[\\-\\.]{4,}\\n',
+ end: '\\n[\\-\\.]{4,}$',
+ relevance: 10
+ },
+ // passthrough blocks
+ {
+ begin: '^\\+{4,}\\n',
+ end: '\\n\\+{4,}$',
+ contains: [
+ {
+ begin: '<', end: '>',
+ subLanguage: 'xml',
+ relevance: 0
+ }
+ ],
+ relevance: 10
+ },
+ // lists (can only capture indicators)
+ {
+ className: 'bullet',
+ begin: '^(\\*+|\\-+|\\.+|[^\\n]+?::)\\s+'
+ },
+ // admonition
+ {
+ className: 'symbol',
+ begin: '^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\s+',
+ relevance: 10
+ },
+ // inline strong
+ {
+ className: 'strong',
+ // must not follow a word character or be followed by an asterisk or space
+ begin: '\\B\\*(?![\\*\\s])',
+ end: '(\\n{2}|\\*)',
+ // allow escaped asterisk followed by word char
+ contains: [
+ {
+ begin: '\\\\*\\w',
+ relevance: 0
+ }
+ ]
+ },
+ // inline emphasis
+ {
+ className: 'emphasis',
+ // must not follow a word character or be followed by a single quote or space
+ begin: '\\B\'(?![\'\\s])',
+ end: '(\\n{2}|\')',
+ // allow escaped single quote followed by word char
+ contains: [
+ {
+ begin: '\\\\\'\\w',
+ relevance: 0
+ }
+ ],
+ relevance: 0
+ },
+ // inline emphasis (alt)
+ {
+ className: 'emphasis',
+ // must not follow a word character or be followed by an underline or space
+ begin: '_(?![_\\s])',
+ end: '(\\n{2}|_)',
+ relevance: 0
+ },
+ // inline smart quotes
+ {
+ className: 'string',
+ variants: [
+ {begin: "``.+?''"},
+ {begin: "`.+?'"}
+ ]
+ },
+ // inline code snippets (TODO should get same treatment as strong and emphasis)
+ {
+ className: 'code',
+ begin: '(`.+?`|\\+.+?\\+)',
+ relevance: 0
+ },
+ // indented literal block
+ {
+ className: 'code',
+ begin: '^[ \\t]',
+ end: '$',
+ relevance: 0
+ },
+ // horizontal rules
+ {
+ begin: '^\'{3,}[ \\t]*$',
+ relevance: 10
+ },
+ // images and links
+ {
+ begin: '(link:)?(http|https|ftp|file|irc|image:?):\\S+\\[.*?\\]',
+ returnBegin: true,
+ contains: [
+ {
+ begin: '(link|image:?):',
+ relevance: 0
+ },
+ {
+ className: 'link',
+ begin: '\\w',
+ end: '[^\\[]+',
+ relevance: 0
+ },
+ {
+ className: 'string',
+ begin: '\\[',
+ end: '\\]',
+ excludeBegin: true,
+ excludeEnd: true,
+ relevance: 0
+ }
+ ],
+ relevance: 10
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("aspectj",
+/*
+Language: AspectJ
+Author: Hakan Ozler <ozler.hakan@gmail.com>
+Description: Syntax Highlighting for the AspectJ Language which is a general-purpose aspect-oriented extension to the Java programming language.
+ */
+function (hljs) {
+ var KEYWORDS =
+ 'false synchronized int abstract float private char boolean static null if const ' +
+ 'for true while long throw strictfp finally protected import native final return void ' +
+ 'enum else extends implements break transient new catch instanceof byte super volatile case ' +
+ 'assert short package default double public try this switch continue throws privileged ' +
+ 'aspectOf adviceexecution proceed cflowbelow cflow initialization preinitialization ' +
+ 'staticinitialization withincode target within execution getWithinTypeName handler ' +
+ 'thisJoinPoint thisJoinPointStaticPart thisEnclosingJoinPointStaticPart declare parents '+
+ 'warning error soft precedence thisAspectInstance';
+ var SHORTKEYS = 'get set args call';
+ return {
+ keywords : KEYWORDS,
+ illegal : /<\/|#/,
+ contains : [
+ hljs.COMMENT(
+ '/\\*\\*',
+ '\\*/',
+ {
+ relevance : 0,
+ contains : [
+ {
+ // eat up @'s in emails to prevent them to be recognized as doctags
+ begin: /\w+@/, relevance: 0
+ },
+ {
+ className : 'doctag',
+ begin : '@[A-Za-z]+'
+ }
+ ]
+ }
+ ),
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ {
+ className : 'class',
+ beginKeywords : 'aspect',
+ end : /[{;=]/,
+ excludeEnd : true,
+ illegal : /[:;"\[\]]/,
+ contains : [
+ {
+ beginKeywords : 'extends implements pertypewithin perthis pertarget percflowbelow percflow issingleton'
+ },
+ hljs.UNDERSCORE_TITLE_MODE,
+ {
+ begin : /\([^\)]*/,
+ end : /[)]+/,
+ keywords : KEYWORDS + ' ' + SHORTKEYS,
+ excludeEnd : false
+ }
+ ]
+ },
+ {
+ className : 'class',
+ beginKeywords : 'class interface',
+ end : /[{;=]/,
+ excludeEnd : true,
+ relevance: 0,
+ keywords : 'class interface',
+ illegal : /[:"\[\]]/,
+ contains : [
+ {beginKeywords : 'extends implements'},
+ hljs.UNDERSCORE_TITLE_MODE
+ ]
+ },
+ {
+ // AspectJ Constructs
+ beginKeywords : 'pointcut after before around throwing returning',
+ end : /[)]/,
+ excludeEnd : false,
+ illegal : /["\[\]]/,
+ contains : [
+ {
+ begin : hljs.UNDERSCORE_IDENT_RE + '\\s*\\(',
+ returnBegin : true,
+ contains : [hljs.UNDERSCORE_TITLE_MODE]
+ }
+ ]
+ },
+ {
+ begin : /[:]/,
+ returnBegin : true,
+ end : /[{;]/,
+ relevance: 0,
+ excludeEnd : false,
+ keywords : KEYWORDS,
+ illegal : /["\[\]]/,
+ contains : [
+ {
+ begin : hljs.UNDERSCORE_IDENT_RE + '\\s*\\(',
+ keywords : KEYWORDS + ' ' + SHORTKEYS
+ },
+ hljs.QUOTE_STRING_MODE
+ ]
+ },
+ {
+ // this prevents 'new Name(...), or throw ...' from being recognized as a function definition
+ beginKeywords : 'new throw',
+ relevance : 0
+ },
+ {
+ // the function class is a bit different for AspectJ compared to the Java language
+ className : 'function',
+ begin : /\w+ +\w+(\.)?\w+\s*\([^\)]*\)\s*((throws)[\w\s,]+)?[\{;]/,
+ returnBegin : true,
+ end : /[{;=]/,
+ keywords : KEYWORDS,
+ excludeEnd : true,
+ contains : [
+ {
+ begin : hljs.UNDERSCORE_IDENT_RE + '\\s*\\(',
+ returnBegin : true,
+ relevance: 0,
+ contains : [hljs.UNDERSCORE_TITLE_MODE]
+ },
+ {
+ className : 'params',
+ begin : /\(/, end : /\)/,
+ relevance: 0,
+ keywords : KEYWORDS,
+ contains : [
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.C_NUMBER_MODE,
+ hljs.C_BLOCK_COMMENT_MODE
+ ]
+ },
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE
+ ]
+ },
+ hljs.C_NUMBER_MODE,
+ {
+ // annotation is also used in this language
+ className : 'meta',
+ begin : '@[A-Za-z]+'
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("autohotkey",
+/*
+Language: AutoHotkey
+Author: Seongwon Lee <dlimpid@gmail.com>
+Description: AutoHotkey language definition
+Category: scripting
+*/
+
+function(hljs) {
+ var BACKTICK_ESCAPE = {
+ begin: /`[\s\S]/
+ };
+
+ return {
+ case_insensitive: true,
+ keywords: {
+ keyword: 'Break Continue Else Gosub If Loop Return While',
+ literal: 'A|0 true false NOT AND OR',
+ built_in: 'ComSpec Clipboard ClipboardAll ErrorLevel',
+ },
+ contains: [
+ {
+ className: 'built_in',
+ begin: 'A_[a-zA-Z0-9]+'
+ },
+ BACKTICK_ESCAPE,
+ hljs.inherit(hljs.QUOTE_STRING_MODE, {contains: [BACKTICK_ESCAPE]}),
+ hljs.COMMENT(';', '$', {relevance: 0}),
+ {
+ className: 'number',
+ begin: hljs.NUMBER_RE,
+ relevance: 0
+ },
+ {
+ className: 'variable', // FIXME
+ begin: '%', end: '%',
+ illegal: '\\n',
+ contains: [BACKTICK_ESCAPE]
+ },
+ {
+ className: 'symbol',
+ contains: [BACKTICK_ESCAPE],
+ variants: [
+ {begin: '^[^\\n";]+::(?!=)'},
+ {begin: '^[^\\n";]+:(?!=)', relevance: 0} // zero relevance as it catches a lot of things
+ // followed by a single ':' in many languages
+ ]
+ },
+ {
+ // consecutive commas, not for highlighting but just for relevance
+ begin: ',\\s*,'
+ }
+ ]
+ }
+});
+
+hljs.registerLanguage("autoit",
+/*
+Language: AutoIt
+Author: Manh Tuan <junookyo@gmail.com>
+Description: AutoIt language definition
+Category: scripting
+*/
+
+function(hljs) {
+ var KEYWORDS = 'ByRef Case Const ContinueCase ContinueLoop ' +
+ 'Default Dim Do Else ElseIf EndFunc EndIf EndSelect ' +
+ 'EndSwitch EndWith Enum Exit ExitLoop For Func ' +
+ 'Global If In Local Next ReDim Return Select Static ' +
+ 'Step Switch Then To Until Volatile WEnd While With',
+
+ LITERAL = 'True False And Null Not Or',
+
+ BUILT_IN =
+ 'Abs ACos AdlibRegister AdlibUnRegister Asc AscW ASin Assign ATan AutoItSetOption AutoItWinGetTitle AutoItWinSetTitle Beep Binary BinaryLen BinaryMid BinaryToString BitAND BitNOT BitOR BitRotate BitShift BitXOR BlockInput Break Call CDTray Ceiling Chr ChrW ClipGet ClipPut ConsoleRead ConsoleWrite ConsoleWriteError ControlClick ControlCommand ControlDisable ControlEnable ControlFocus ControlGetFocus ControlGetHandle ControlGetPos ControlGetText ControlHide ControlListView ControlMove ControlSend ControlSetText ControlShow ControlTreeView Cos Dec DirCopy DirCreate DirGetSize DirMove DirRemove DllCall DllCallAddress DllCallbackFree DllCallbackGetPtr DllCallbackRegister DllClose DllOpen DllStructCreate DllStructGetData DllStructGetPtr DllStructGetSize DllStructSetData DriveGetDrive DriveGetFileSystem DriveGetLabel DriveGetSerial DriveGetType DriveMapAdd DriveMapDel DriveMapGet DriveSetLabel DriveSpaceFree DriveSpaceTotal DriveStatus EnvGet EnvSet EnvUpdate Eval Execute Exp FileChangeDir FileClose FileCopy FileCreateNTFSLink FileCreateShortcut FileDelete FileExists FileFindFirstFile FileFindNextFile FileFlush FileGetAttrib FileGetEncoding FileGetLongName FileGetPos FileGetShortcut FileGetShortName FileGetSize FileGetTime FileGetVersion FileInstall FileMove FileOpen FileOpenDialog FileRead FileReadLine FileReadToArray FileRecycle FileRecycleEmpty FileSaveDialog FileSelectFolder FileSetAttrib FileSetEnd FileSetPos FileSetTime FileWrite FileWriteLine Floor FtpSetProxy FuncName GUICreate GUICtrlCreateAvi GUICtrlCreateButton GUICtrlCreateCheckbox GUICtrlCreateCombo GUICtrlCreateContextMenu GUICtrlCreateDate GUICtrlCreateDummy GUICtrlCreateEdit GUICtrlCreateGraphic GUICtrlCreateGroup GUICtrlCreateIcon GUICtrlCreateInput GUICtrlCreateLabel GUICtrlCreateList GUICtrlCreateListView GUICtrlCreateListViewItem GUICtrlCreateMenu GUICtrlCreateMenuItem GUICtrlCreateMonthCal GUICtrlCreateObj GUICtrlCreatePic GUICtrlCreateProgress GUICtrlCreateRadio GUICtrlCreateSlider GUICtrlCreateTab GUICtrlCreateTabItem GUICtrlCreateTreeView GUICtrlCreateTreeViewItem GUICtrlCreateUpdown GUICtrlDelete GUICtrlGetHandle GUICtrlGetState GUICtrlRead GUICtrlRecvMsg GUICtrlRegisterListViewSort GUICtrlSendMsg GUICtrlSendToDummy GUICtrlSetBkColor GUICtrlSetColor GUICtrlSetCursor GUICtrlSetData GUICtrlSetDefBkColor GUICtrlSetDefColor GUICtrlSetFont GUICtrlSetGraphic GUICtrlSetImage GUICtrlSetLimit GUICtrlSetOnEvent GUICtrlSetPos GUICtrlSetResizing GUICtrlSetState GUICtrlSetStyle GUICtrlSetTip GUIDelete GUIGetCursorInfo GUIGetMsg GUIGetStyle GUIRegisterMsg GUISetAccelerators GUISetBkColor GUISetCoord GUISetCursor GUISetFont GUISetHelp GUISetIcon GUISetOnEvent GUISetState GUISetStyle GUIStartGroup GUISwitch Hex HotKeySet HttpSetProxy HttpSetUserAgent HWnd InetClose InetGet InetGetInfo InetGetSize InetRead IniDelete IniRead IniReadSection IniReadSectionNames IniRenameSection IniWrite IniWriteSection InputBox Int IsAdmin IsArray IsBinary IsBool IsDeclared IsDllStruct IsFloat IsFunc IsHWnd IsInt IsKeyword IsNumber IsObj IsPtr IsString Log MemGetStats Mod MouseClick MouseClickDrag MouseDown MouseGetCursor MouseGetPos MouseMove MouseUp MouseWheel MsgBox Number ObjCreate ObjCreateInterface ObjEvent ObjGet ObjName OnAutoItExitRegister OnAutoItExitUnRegister Ping PixelChecksum PixelGetColor PixelSearch ProcessClose ProcessExists ProcessGetStats ProcessList ProcessSetPriority ProcessWait ProcessWaitClose ProgressOff ProgressOn ProgressSet Ptr Random RegDelete RegEnumKey RegEnumVal RegRead RegWrite Round Run RunAs RunAsWait RunWait Send SendKeepActive SetError SetExtended ShellExecute ShellExecuteWait Shutdown Sin Sleep SoundPlay SoundSetWaveVolume SplashImageOn SplashOff SplashTextOn Sqrt SRandom StatusbarGetText StderrRead StdinWrite StdioClose StdoutRead String StringAddCR StringCompare StringFormat StringFromASCIIArray StringInStr StringIsAlNum StringIsAlpha StringIsASCII StringIsDigit StringIsFloat StringIsInt StringIsLower StringIsSpace StringIsUpper StringIsXDigit StringLeft StringLen StringLower StringMid StringRegExp StringRegExpReplace StringReplace StringReverse StringRight StringSplit StringStripCR StringStripWS StringToASCIIArray StringToBinary StringTrimLeft StringTrimRight StringUpper Tan TCPAccept TCPCloseSocket TCPConnect TCPListen TCPNameToIP TCPRecv TCPSend TCPShutdown, UDPShutdown TCPStartup, UDPStartup TimerDiff TimerInit ToolTip TrayCreateItem TrayCreateMenu TrayGetMsg TrayItemDelete TrayItemGetHandle TrayItemGetState TrayItemGetText TrayItemSetOnEvent TrayItemSetState TrayItemSetText TraySetClick TraySetIcon TraySetOnEvent TraySetPauseIcon TraySetState TraySetToolTip TrayTip UBound UDPBind UDPCloseSocket UDPOpen UDPRecv UDPSend VarGetType WinActivate WinActive WinClose WinExists WinFlash WinGetCaretPos WinGetClassList WinGetClientSize WinGetHandle WinGetPos WinGetProcess WinGetState WinGetText WinGetTitle WinKill WinList WinMenuSelectItem WinMinimizeAll WinMinimizeAllUndo WinMove WinSetOnTop WinSetState WinSetTitle WinSetTrans WinWait',
+
+ COMMENT = {
+ variants: [
+ hljs.COMMENT(';', '$', {relevance: 0}),
+ hljs.COMMENT('#cs', '#ce'),
+ hljs.COMMENT('#comments-start', '#comments-end')
+ ]
+ },
+
+ VARIABLE = {
+ begin: '\\$[A-z0-9_]+'
+ },
+
+ STRING = {
+ className: 'string',
+ variants: [{
+ begin: /"/,
+ end: /"/,
+ contains: [{
+ begin: /""/,
+ relevance: 0
+ }]
+ }, {
+ begin: /'/,
+ end: /'/,
+ contains: [{
+ begin: /''/,
+ relevance: 0
+ }]
+ }]
+ },
+
+ NUMBER = {
+ variants: [hljs.BINARY_NUMBER_MODE, hljs.C_NUMBER_MODE]
+ },
+
+ PREPROCESSOR = {
+ className: 'meta',
+ begin: '#',
+ end: '$',
+ keywords: {'meta-keyword': 'comments include include-once NoTrayIcon OnAutoItStartRegister pragma compile RequireAdmin'},
+ contains: [{
+ begin: /\\\n/,
+ relevance: 0
+ }, {
+ beginKeywords: 'include',
+ keywords: {'meta-keyword': 'include'},
+ end: '$',
+ contains: [
+ STRING, {
+ className: 'meta-string',
+ variants: [{
+ begin: '<',
+ end: '>'
+ }, {
+ begin: /"/,
+ end: /"/,
+ contains: [{
+ begin: /""/,
+ relevance: 0
+ }]
+ }, {
+ begin: /'/,
+ end: /'/,
+ contains: [{
+ begin: /''/,
+ relevance: 0
+ }]
+ }]
+ }
+ ]
+ },
+ STRING,
+ COMMENT
+ ]
+ },
+
+ CONSTANT = {
+ className: 'symbol',
+ // begin: '@',
+ // end: '$',
+ // keywords: 'AppDataCommonDir AppDataDir AutoItExe AutoItPID AutoItVersion AutoItX64 COM_EventObj CommonFilesDir Compiled ComputerName ComSpec CPUArch CR CRLF DesktopCommonDir DesktopDepth DesktopDir DesktopHeight DesktopRefresh DesktopWidth DocumentsCommonDir error exitCode exitMethod extended FavoritesCommonDir FavoritesDir GUI_CtrlHandle GUI_CtrlId GUI_DragFile GUI_DragId GUI_DropId GUI_WinHandle HomeDrive HomePath HomeShare HotKeyPressed HOUR IPAddress1 IPAddress2 IPAddress3 IPAddress4 KBLayout LF LocalAppDataDir LogonDNSDomain LogonDomain LogonServer MDAY MIN MON MSEC MUILang MyDocumentsDir NumParams OSArch OSBuild OSLang OSServicePack OSType OSVersion ProgramFilesDir ProgramsCommonDir ProgramsDir ScriptDir ScriptFullPath ScriptLineNumber ScriptName SEC StartMenuCommonDir StartMenuDir StartupCommonDir StartupDir SW_DISABLE SW_ENABLE SW_HIDE SW_LOCK SW_MAXIMIZE SW_MINIMIZE SW_RESTORE SW_SHOW SW_SHOWDEFAULT SW_SHOWMAXIMIZED SW_SHOWMINIMIZED SW_SHOWMINNOACTIVE SW_SHOWNA SW_SHOWNOACTIVATE SW_SHOWNORMAL SW_UNLOCK SystemDir TAB TempDir TRAY_ID TrayIconFlashing TrayIconVisible UserName UserProfileDir WDAY WindowsDir WorkingDir YDAY YEAR',
+ // relevance: 5
+ begin: '@[A-z0-9_]+'
+ },
+
+ FUNCTION = {
+ className: 'function',
+ beginKeywords: 'Func',
+ end: '$',
+ illegal: '\\$|\\[|%',
+ contains: [
+ hljs.UNDERSCORE_TITLE_MODE, {
+ className: 'params',
+ begin: '\\(',
+ end: '\\)',
+ contains: [
+ VARIABLE,
+ STRING,
+ NUMBER
+ ]
+ }
+ ]
+ };
+
+ return {
+ case_insensitive: true,
+ illegal: /\/\*/,
+ keywords: {
+ keyword: KEYWORDS,
+ built_in: BUILT_IN,
+ literal: LITERAL
+ },
+ contains: [
+ COMMENT,
+ VARIABLE,
+ STRING,
+ NUMBER,
+ PREPROCESSOR,
+ CONSTANT,
+ FUNCTION
+ ]
+ }
+});
+
+hljs.registerLanguage("avrasm",
+/*
+Language: AVR Assembler
+Author: Vladimir Ermakov <vooon341@gmail.com>
+Category: assembler
+*/
+
+function(hljs) {
+ return {
+ case_insensitive: true,
+ lexemes: '\\.?' + hljs.IDENT_RE,
+ keywords: {
+ keyword:
+ /* mnemonic */
+ 'adc add adiw and andi asr bclr bld brbc brbs brcc brcs break breq brge brhc brhs ' +
+ 'brid brie brlo brlt brmi brne brpl brsh brtc brts brvc brvs bset bst call cbi cbr ' +
+ 'clc clh cli cln clr cls clt clv clz com cp cpc cpi cpse dec eicall eijmp elpm eor ' +
+ 'fmul fmuls fmulsu icall ijmp in inc jmp ld ldd ldi lds lpm lsl lsr mov movw mul ' +
+ 'muls mulsu neg nop or ori out pop push rcall ret reti rjmp rol ror sbc sbr sbrc sbrs ' +
+ 'sec seh sbi sbci sbic sbis sbiw sei sen ser ses set sev sez sleep spm st std sts sub ' +
+ 'subi swap tst wdr',
+ built_in:
+ /* general purpose registers */
+ 'r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16 r17 r18 r19 r20 r21 r22 ' +
+ 'r23 r24 r25 r26 r27 r28 r29 r30 r31 x|0 xh xl y|0 yh yl z|0 zh zl ' +
+ /* IO Registers (ATMega128) */
+ 'ucsr1c udr1 ucsr1a ucsr1b ubrr1l ubrr1h ucsr0c ubrr0h tccr3c tccr3a tccr3b tcnt3h ' +
+ 'tcnt3l ocr3ah ocr3al ocr3bh ocr3bl ocr3ch ocr3cl icr3h icr3l etimsk etifr tccr1c ' +
+ 'ocr1ch ocr1cl twcr twdr twar twsr twbr osccal xmcra xmcrb eicra spmcsr spmcr portg ' +
+ 'ddrg ping portf ddrf sreg sph spl xdiv rampz eicrb eimsk gimsk gicr eifr gifr timsk ' +
+ 'tifr mcucr mcucsr tccr0 tcnt0 ocr0 assr tccr1a tccr1b tcnt1h tcnt1l ocr1ah ocr1al ' +
+ 'ocr1bh ocr1bl icr1h icr1l tccr2 tcnt2 ocr2 ocdr wdtcr sfior eearh eearl eedr eecr ' +
+ 'porta ddra pina portb ddrb pinb portc ddrc pinc portd ddrd pind spdr spsr spcr udr0 ' +
+ 'ucsr0a ucsr0b ubrr0l acsr admux adcsr adch adcl porte ddre pine pinf',
+ meta:
+ '.byte .cseg .db .def .device .dseg .dw .endmacro .equ .eseg .exit .include .list ' +
+ '.listmac .macro .nolist .org .set'
+ },
+ contains: [
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.COMMENT(
+ ';',
+ '$',
+ {
+ relevance: 0
+ }
+ ),
+ hljs.C_NUMBER_MODE, // 0x..., decimal, float
+ hljs.BINARY_NUMBER_MODE, // 0b...
+ {
+ className: 'number',
+ begin: '\\b(\\$[a-zA-Z0-9]+|0o[0-7]+)' // $..., 0o...
+ },
+ hljs.QUOTE_STRING_MODE,
+ {
+ className: 'string',
+ begin: '\'', end: '[^\\\\]\'',
+ illegal: '[^\\\\][^\']'
+ },
+ {className: 'symbol', begin: '^[A-Za-z0-9_.$]+:'},
+ {className: 'meta', begin: '#', end: '$'},
+ { // подстановка в «.macro»
+ className: 'subst',
+ begin: '@[0-9]+'
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("axapta",
+/*
+Language: Axapta
+Author: Dmitri Roudakov <dmitri@roudakov.ru>
+Category: enterprise
+*/
+
+function(hljs) {
+ return {
+ keywords: 'false int abstract private char boolean static null if for true ' +
+ 'while long throw finally protected final return void enum else ' +
+ 'break new catch byte super case short default double public try this switch ' +
+ 'continue reverse firstfast firstonly forupdate nofetch sum avg minof maxof count ' +
+ 'order group by asc desc index hint like dispaly edit client server ttsbegin ' +
+ 'ttscommit str real date container anytype common div mod',
+ contains: [
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.C_NUMBER_MODE,
+ {
+ className: 'meta',
+ begin: '#', end: '$'
+ },
+ {
+ className: 'class',
+ beginKeywords: 'class interface', end: '{', excludeEnd: true,
+ illegal: ':',
+ contains: [
+ {beginKeywords: 'extends implements'},
+ hljs.UNDERSCORE_TITLE_MODE
+ ]
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("bash",
+/*
+Language: Bash
+Author: vah <vahtenberg@gmail.com>
+Contributrors: Benjamin Pannell <contact@sierrasoftworks.com>
+Category: common
+*/
+
+function(hljs) {
+ var VAR = {
+ className: 'variable',
+ variants: [
+ {begin: /\$[\w\d#@][\w\d_]*/},
+ {begin: /\$\{(.*?)}/}
+ ]
+ };
+ var QUOTE_STRING = {
+ className: 'string',
+ begin: /"/, end: /"/,
+ contains: [
+ hljs.BACKSLASH_ESCAPE,
+ VAR,
+ {
+ className: 'variable',
+ begin: /\$\(/, end: /\)/,
+ contains: [hljs.BACKSLASH_ESCAPE]
+ }
+ ]
+ };
+ var APOS_STRING = {
+ className: 'string',
+ begin: /'/, end: /'/
+ };
+
+ return {
+ aliases: ['sh', 'zsh'],
+ lexemes: /-?[a-z\.]+/,
+ keywords: {
+ keyword:
+ 'if then else elif fi for while in do done case esac function',
+ literal:
+ 'true false',
+ built_in:
+ // Shell built-ins
+ // http://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html
+ 'break cd continue eval exec exit export getopts hash pwd readonly return shift test times ' +
+ 'trap umask unset ' +
+ // Bash built-ins
+ 'alias bind builtin caller command declare echo enable help let local logout mapfile printf ' +
+ 'read readarray source type typeset ulimit unalias ' +
+ // Shell modifiers
+ 'set shopt ' +
+ // Zsh built-ins
+ 'autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles ' +
+ 'compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate ' +
+ 'fc fg float functions getcap getln history integer jobs kill limit log noglob popd print ' +
+ 'pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit ' +
+ 'unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof ' +
+ 'zpty zregexparse zsocket zstyle ztcp',
+ _:
+ '-ne -eq -lt -gt -f -d -e -s -l -a' // relevance booster
+ },
+ contains: [
+ {
+ className: 'meta',
+ begin: /^#![^\n]+sh\s*$/,
+ relevance: 10
+ },
+ {
+ className: 'function',
+ begin: /\w[\w\d_]*\s*\(\s*\)\s*\{/,
+ returnBegin: true,
+ contains: [hljs.inherit(hljs.TITLE_MODE, {begin: /\w[\w\d_]*/})],
+ relevance: 0
+ },
+ hljs.HASH_COMMENT_MODE,
+ QUOTE_STRING,
+ APOS_STRING,
+ VAR
+ ]
+ };
+});
+
+hljs.registerLanguage("basic",
+/*
+Language: Basic
+Author: Raphaël Assénat <raph@raphnet.net>
+Description: Based on the BASIC reference from the Tandy 1000 guide
+*/
+function(hljs) {
+ return {
+ case_insensitive: true,
+ illegal: '^\.',
+ // Support explicitely typed variables that end with $%! or #.
+ lexemes: '[a-zA-Z][a-zA-Z0-9_\$\%\!\#]*',
+ keywords: {
+ keyword:
+ 'ABS ASC AND ATN AUTO|0 BEEP BLOAD|10 BSAVE|10 CALL CALLS CDBL CHAIN CHDIR CHR$|10 CINT CIRCLE ' +
+ 'CLEAR CLOSE CLS COLOR COM COMMON CONT COS CSNG CSRLIN CVD CVI CVS DATA DATE$ ' +
+ 'DEFDBL DEFINT DEFSNG DEFSTR DEF|0 SEG USR DELETE DIM DRAW EDIT END ENVIRON ENVIRON$ ' +
+ 'EOF EQV ERASE ERDEV ERDEV$ ERL ERR ERROR EXP FIELD FILES FIX FOR|0 FRE GET GOSUB|10 GOTO ' +
+ 'HEX$ IF|0 THEN ELSE|0 INKEY$ INP INPUT INPUT# INPUT$ INSTR IMP INT IOCTL IOCTL$ KEY ON ' +
+ 'OFF LIST KILL LEFT$ LEN LET LINE LLIST LOAD LOC LOCATE LOF LOG LPRINT USING LSET ' +
+ 'MERGE MID$ MKDIR MKD$ MKI$ MKS$ MOD NAME NEW NEXT NOISE NOT OCT$ ON OR PEN PLAY STRIG OPEN OPTION ' +
+ 'BASE OUT PAINT PALETTE PCOPY PEEK PMAP POINT POKE POS PRINT PRINT] PSET PRESET ' +
+ 'PUT RANDOMIZE READ REM RENUM RESET|0 RESTORE RESUME RETURN|0 RIGHT$ RMDIR RND RSET ' +
+ 'RUN SAVE SCREEN SGN SHELL SIN SOUND SPACE$ SPC SQR STEP STICK STOP STR$ STRING$ SWAP ' +
+ 'SYSTEM TAB TAN TIME$ TIMER TROFF TRON TO USR VAL VARPTR VARPTR$ VIEW WAIT WHILE ' +
+ 'WEND WIDTH WINDOW WRITE XOR'
+ },
+ contains: [
+ hljs.QUOTE_STRING_MODE,
+ hljs.COMMENT('REM', '$', {relevance: 10}),
+ hljs.COMMENT('\'', '$', {relevance: 0}),
+ {
+ // Match line numbers
+ className: 'symbol',
+ begin: '^[0-9]+\ ',
+ relevance: 10
+ },
+ {
+ // Match typed numeric constants (1000, 12.34!, 1.2e5, 1.5#, 1.2D2)
+ className: 'number',
+ begin: '\\b([0-9]+[0-9edED\.]*[#\!]?)',
+ relevance: 0
+ },
+ {
+ // Match hexadecimal numbers (&Hxxxx)
+ className: 'number',
+ begin: '(\&[hH][0-9a-fA-F]{1,4})'
+ },
+ {
+ // Match octal numbers (&Oxxxxxx)
+ className: 'number',
+ begin: '(\&[oO][0-7]{1,6})'
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("bnf",
+/*
+Language: Backus–Naur Form
+Author: Oleg Efimov <efimovov@gmail.com>
+*/
+
+function(hljs){
+ return {
+ contains: [
+ // Attribute
+ {
+ className: 'attribute',
+ begin: /</, end: />/
+ },
+ // Specific
+ {
+ begin: /::=/,
+ starts: {
+ end: /$/,
+ contains: [
+ {
+ begin: /</, end: />/
+ },
+ // Common
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE
+ ]
+ }
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("brainfuck",
+/*
+Language: Brainfuck
+Author: Evgeny Stepanischev <imbolk@gmail.com>
+*/
+
+function(hljs){
+ var LITERAL = {
+ className: 'literal',
+ begin: '[\\+\\-]',
+ relevance: 0
+ };
+ return {
+ aliases: ['bf'],
+ contains: [
+ hljs.COMMENT(
+ '[^\\[\\]\\.,\\+\\-<> \r\n]',
+ '[\\[\\]\\.,\\+\\-<> \r\n]',
+ {
+ returnEnd: true,
+ relevance: 0
+ }
+ ),
+ {
+ className: 'title',
+ begin: '[\\[\\]]',
+ relevance: 0
+ },
+ {
+ className: 'string',
+ begin: '[\\.,]',
+ relevance: 0
+ },
+ {
+ // this mode works as the only relevance counter
+ begin: /\+\+|\-\-/, returnBegin: true,
+ contains: [LITERAL]
+ },
+ LITERAL
+ ]
+ };
+});
+
+hljs.registerLanguage("cal",
+/*
+Language: C/AL
+Author: Kenneth Fuglsang Christensen <kfuglsang@gmail.com>
+Description: Provides highlighting of Microsoft Dynamics NAV C/AL code files
+*/
+
+function(hljs) {
+ var KEYWORDS =
+ 'div mod in and or not xor asserterror begin case do downto else end exit for if of repeat then to ' +
+ 'until while with var';
+ var LITERALS = 'false true';
+ var COMMENT_MODES = [
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.COMMENT(
+ /\{/,
+ /\}/,
+ {
+ relevance: 0
+ }
+ ),
+ hljs.COMMENT(
+ /\(\*/,
+ /\*\)/,
+ {
+ relevance: 10
+ }
+ )
+ ];
+ var STRING = {
+ className: 'string',
+ begin: /'/, end: /'/,
+ contains: [{begin: /''/}]
+ };
+ var CHAR_STRING = {
+ className: 'string', begin: /(#\d+)+/
+ };
+ var DATE = {
+ className: 'number',
+ begin: '\\b\\d+(\\.\\d+)?(DT|D|T)',
+ relevance: 0
+ };
+ var DBL_QUOTED_VARIABLE = {
+ className: 'string', // not a string technically but makes sense to be highlighted in the same style
+ begin: '"',
+ end: '"'
+ };
+
+ var PROCEDURE = {
+ className: 'function',
+ beginKeywords: 'procedure', end: /[:;]/,
+ keywords: 'procedure|10',
+ contains: [
+ hljs.TITLE_MODE,
+ {
+ className: 'params',
+ begin: /\(/, end: /\)/,
+ keywords: KEYWORDS,
+ contains: [STRING, CHAR_STRING]
+ }
+ ].concat(COMMENT_MODES)
+ };
+
+ var OBJECT = {
+ className: 'class',
+ begin: 'OBJECT (Table|Form|Report|Dataport|Codeunit|XMLport|MenuSuite|Page|Query) (\\d+) ([^\\r\\n]+)',
+ returnBegin: true,
+ contains: [
+ hljs.TITLE_MODE,
+ PROCEDURE
+ ]
+ };
+
+ return {
+ case_insensitive: true,
+ keywords: { keyword: KEYWORDS, literal: LITERALS },
+ illegal: /\/\*/,
+ contains: [
+ STRING, CHAR_STRING,
+ DATE, DBL_QUOTED_VARIABLE,
+ hljs.NUMBER_MODE,
+ OBJECT,
+ PROCEDURE
+ ]
+ };
+});
+
+hljs.registerLanguage("capnproto",
+/*
+Language: Cap’n Proto
+Author: Oleg Efimov <efimovov@gmail.com>
+Description: Cap’n Proto message definition format
+Category: protocols
+*/
+
+function(hljs) {
+ return {
+ aliases: ['capnp'],
+ keywords: {
+ keyword:
+ 'struct enum interface union group import using const annotation extends in of on as with from fixed',
+ built_in:
+ 'Void Bool Int8 Int16 Int32 Int64 UInt8 UInt16 UInt32 UInt64 Float32 Float64 ' +
+ 'Text Data AnyPointer AnyStruct Capability List',
+ literal:
+ 'true false'
+ },
+ contains: [
+ hljs.QUOTE_STRING_MODE,
+ hljs.NUMBER_MODE,
+ hljs.HASH_COMMENT_MODE,
+ {
+ className: 'meta',
+ begin: /@0x[\w\d]{16};/,
+ illegal: /\n/
+ },
+ {
+ className: 'symbol',
+ begin: /@\d+\b/
+ },
+ {
+ className: 'class',
+ beginKeywords: 'struct enum', end: /\{/,
+ illegal: /\n/,
+ contains: [
+ hljs.inherit(hljs.TITLE_MODE, {
+ starts: {endsWithParent: true, excludeEnd: true} // hack: eating everything after the first title
+ })
+ ]
+ },
+ {
+ className: 'class',
+ beginKeywords: 'interface', end: /\{/,
+ illegal: /\n/,
+ contains: [
+ hljs.inherit(hljs.TITLE_MODE, {
+ starts: {endsWithParent: true, excludeEnd: true} // hack: eating everything after the first title
+ })
+ ]
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("ceylon",
+/*
+Language: Ceylon
+Author: Lucas Werkmeister <mail@lucaswerkmeister.de>
+*/
+function(hljs) {
+ // 2.3. Identifiers and keywords
+ var KEYWORDS =
+ 'assembly module package import alias class interface object given value ' +
+ 'assign void function new of extends satisfies abstracts in out return ' +
+ 'break continue throw assert dynamic if else switch case for while try ' +
+ 'catch finally then let this outer super is exists nonempty';
+ // 7.4.1 Declaration Modifiers
+ var DECLARATION_MODIFIERS =
+ 'shared abstract formal default actual variable late native deprecated' +
+ 'final sealed annotation suppressWarnings small';
+ // 7.4.2 Documentation
+ var DOCUMENTATION =
+ 'doc by license see throws tagged';
+ var SUBST = {
+ className: 'subst', excludeBegin: true, excludeEnd: true,
+ begin: /``/, end: /``/,
+ keywords: KEYWORDS,
+ relevance: 10
+ };
+ var EXPRESSIONS = [
+ {
+ // verbatim string
+ className: 'string',
+ begin: '"""',
+ end: '"""',
+ relevance: 10
+ },
+ {
+ // string literal or template
+ className: 'string',
+ begin: '"', end: '"',
+ contains: [SUBST]
+ },
+ {
+ // character literal
+ className: 'string',
+ begin: "'",
+ end: "'"
+ },
+ {
+ // numeric literal
+ className: 'number',
+ begin: '#[0-9a-fA-F_]+|\\$[01_]+|[0-9_]+(?:\\.[0-9_](?:[eE][+-]?\\d+)?)?[kMGTPmunpf]?',
+ relevance: 0
+ }
+ ];
+ SUBST.contains = EXPRESSIONS;
+
+ return {
+ keywords: {
+ keyword: KEYWORDS + ' ' + DECLARATION_MODIFIERS,
+ meta: DOCUMENTATION
+ },
+ illegal: '\\$[^01]|#[^0-9a-fA-F]',
+ contains: [
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.COMMENT('/\\*', '\\*/', {contains: ['self']}),
+ {
+ // compiler annotation
+ className: 'meta',
+ begin: '@[a-z]\\w*(?:\\:\"[^\"]*\")?'
+ }
+ ].concat(EXPRESSIONS)
+ };
+});
+
+hljs.registerLanguage("clojure",
+/*
+Language: Clojure
+Description: Clojure syntax (based on lisp.js)
+Author: mfornos
+Category: lisp
+*/
+
+function(hljs) {
+ var keywords = {
+ 'builtin-name':
+ // Clojure keywords
+ 'def defonce cond apply if-not if-let if not not= = < > <= >= == + / * - rem '+
+ 'quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? '+
+ 'set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? '+
+ 'class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? '+
+ 'string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . '+
+ 'inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last '+
+ 'drop-while while intern condp case reduced cycle split-at split-with repeat replicate '+
+ 'iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext '+
+ 'nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends '+
+ 'add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler '+
+ 'set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter '+
+ 'monitor-exit defmacro defn defn- macroexpand macroexpand-1 for dosync and or '+
+ 'when when-not when-let comp juxt partial sequence memoize constantly complement identity assert '+
+ 'peek pop doto proxy defstruct first rest cons defprotocol cast coll deftype defrecord last butlast '+
+ 'sigs reify second ffirst fnext nfirst nnext defmulti defmethod meta with-meta ns in-ns create-ns import '+
+ 'refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! '+
+ 'assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger '+
+ 'bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline '+
+ 'flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking '+
+ 'assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! '+
+ 'reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! '+
+ 'new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty '+
+ 'hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list '+
+ 'disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer '+
+ 'chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate '+
+ 'unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta '+
+ 'lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize'
+ };
+
+ var SYMBOLSTART = 'a-zA-Z_\\-!.?+*=<>&#\'';
+ var SYMBOL_RE = '[' + SYMBOLSTART + '][' + SYMBOLSTART + '0-9/;:]*';
+ var SIMPLE_NUMBER_RE = '[-+]?\\d+(\\.\\d+)?';
+
+ var SYMBOL = {
+ begin: SYMBOL_RE,
+ relevance: 0
+ };
+ var NUMBER = {
+ className: 'number', begin: SIMPLE_NUMBER_RE,
+ relevance: 0
+ };
+ var STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null});
+ var COMMENT = hljs.COMMENT(
+ ';',
+ '$',
+ {
+ relevance: 0
+ }
+ );
+ var LITERAL = {
+ className: 'literal',
+ begin: /\b(true|false|nil)\b/
+ };
+ var COLLECTION = {
+ begin: '[\\[\\{]', end: '[\\]\\}]'
+ };
+ var HINT = {
+ className: 'comment',
+ begin: '\\^' + SYMBOL_RE
+ };
+ var HINT_COL = hljs.COMMENT('\\^\\{', '\\}');
+ var KEY = {
+ className: 'symbol',
+ begin: '[:]{1,2}' + SYMBOL_RE
+ };
+ var LIST = {
+ begin: '\\(', end: '\\)'
+ };
+ var BODY = {
+ endsWithParent: true,
+ relevance: 0
+ };
+ var NAME = {
+ keywords: keywords,
+ lexemes: SYMBOL_RE,
+ className: 'name', begin: SYMBOL_RE,
+ starts: BODY
+ };
+ var DEFAULT_CONTAINS = [LIST, STRING, HINT, HINT_COL, COMMENT, KEY, COLLECTION, NUMBER, LITERAL, SYMBOL];
+
+ LIST.contains = [hljs.COMMENT('comment', ''), NAME, BODY];
+ BODY.contains = DEFAULT_CONTAINS;
+ COLLECTION.contains = DEFAULT_CONTAINS;
+
+ return {
+ aliases: ['clj'],
+ illegal: /\S/,
+ contains: [LIST, STRING, HINT, HINT_COL, COMMENT, KEY, COLLECTION, NUMBER, LITERAL]
+ }
+});
+
+hljs.registerLanguage("clojure-repl",
+/*
+Language: Clojure REPL
+Description: Clojure REPL sessions
+Author: Ivan Sagalaev <maniac@softwaremaniacs.org>
+Requires: clojure.js
+Category: lisp
+*/
+
+function(hljs) {
+ return {
+ contains: [
+ {
+ className: 'meta',
+ begin: /^([\w.-]+|\s*#_)=>/,
+ starts: {
+ end: /$/,
+ subLanguage: 'clojure'
+ }
+ }
+ ]
+ }
+});
+
+hljs.registerLanguage("cmake",
+/*
+Language: CMake
+Description: CMake is an open-source cross-platform system for build automation.
+Author: Igor Kalnitsky <igor@kalnitsky.org>
+Website: http://kalnitsky.org/
+*/
+
+function(hljs) {
+ return {
+ aliases: ['cmake.in'],
+ case_insensitive: true,
+ keywords: {
+ keyword:
+ 'add_custom_command add_custom_target add_definitions add_dependencies ' +
+ 'add_executable add_library add_subdirectory add_test aux_source_directory ' +
+ 'break build_command cmake_minimum_required cmake_policy configure_file ' +
+ 'create_test_sourcelist define_property else elseif enable_language enable_testing ' +
+ 'endforeach endfunction endif endmacro endwhile execute_process export find_file ' +
+ 'find_library find_package find_path find_program fltk_wrap_ui foreach function ' +
+ 'get_cmake_property get_directory_property get_filename_component get_property ' +
+ 'get_source_file_property get_target_property get_test_property if include ' +
+ 'include_directories include_external_msproject include_regular_expression install ' +
+ 'link_directories load_cache load_command macro mark_as_advanced message option ' +
+ 'output_required_files project qt_wrap_cpp qt_wrap_ui remove_definitions return ' +
+ 'separate_arguments set set_directory_properties set_property ' +
+ 'set_source_files_properties set_target_properties set_tests_properties site_name ' +
+ 'source_group string target_link_libraries try_compile try_run unset variable_watch ' +
+ 'while build_name exec_program export_library_dependencies install_files ' +
+ 'install_programs install_targets link_libraries make_directory remove subdir_depends ' +
+ 'subdirs use_mangled_mesa utility_source variable_requires write_file ' +
+ 'qt5_use_modules qt5_use_package qt5_wrap_cpp on off true false and or ' +
+ 'equal less greater strless strgreater strequal matches'
+ },
+ contains: [
+ {
+ className: 'variable',
+ begin: '\\${', end: '}'
+ },
+ hljs.HASH_COMMENT_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.NUMBER_MODE
+ ]
+ };
+});
+
+hljs.registerLanguage("coffeescript",
+/*
+Language: CoffeeScript
+Author: Dmytrii Nagirniak <dnagir@gmail.com>
+Contributors: Oleg Efimov <efimovov@gmail.com>, Cédric Néhémie <cedric.nehemie@gmail.com>
+Description: CoffeeScript is a programming language that transcompiles to JavaScript. For info about language see http://coffeescript.org/
+Category: common, scripting
+*/
+
+function(hljs) {
+ var KEYWORDS = {
+ keyword:
+ // JS keywords
+ 'in if for while finally new do return else break catch instanceof throw try this ' +
+ 'switch continue typeof delete debugger super ' +
+ // Coffee keywords
+ 'then unless until loop of by when and or is isnt not',
+ literal:
+ // JS literals
+ 'true false null undefined ' +
+ // Coffee literals
+ 'yes no on off',
+ built_in:
+ 'npm require console print module global window document'
+ };
+ var JS_IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';
+ var SUBST = {
+ className: 'subst',
+ begin: /#\{/, end: /}/,
+ keywords: KEYWORDS
+ };
+ var EXPRESSIONS = [
+ hljs.BINARY_NUMBER_MODE,
+ hljs.inherit(hljs.C_NUMBER_MODE, {starts: {end: '(\\s*/)?', relevance: 0}}), // a number tries to eat the following slash to prevent treating it as a regexp
+ {
+ className: 'string',
+ variants: [
+ {
+ begin: /'''/, end: /'''/,
+ contains: [hljs.BACKSLASH_ESCAPE]
+ },
+ {
+ begin: /'/, end: /'/,
+ contains: [hljs.BACKSLASH_ESCAPE]
+ },
+ {
+ begin: /"""/, end: /"""/,
+ contains: [hljs.BACKSLASH_ESCAPE, SUBST]
+ },
+ {
+ begin: /"/, end: /"/,
+ contains: [hljs.BACKSLASH_ESCAPE, SUBST]
+ }
+ ]
+ },
+ {
+ className: 'regexp',
+ variants: [
+ {
+ begin: '///', end: '///',
+ contains: [SUBST, hljs.HASH_COMMENT_MODE]
+ },
+ {
+ begin: '//[gim]*',
+ relevance: 0
+ },
+ {
+ // regex can't start with space to parse x / 2 / 3 as two divisions
+ // regex can't start with *, and it supports an "illegal" in the main mode
+ begin: /\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/
+ }
+ ]
+ },
+ {
+ begin: '@' + JS_IDENT_RE // relevance booster
+ },
+ {
+ begin: '`', end: '`',
+ excludeBegin: true, excludeEnd: true,
+ subLanguage: 'javascript'
+ }
+ ];
+ SUBST.contains = EXPRESSIONS;
+
+ var TITLE = hljs.inherit(hljs.TITLE_MODE, {begin: JS_IDENT_RE});
+ var PARAMS_RE = '(\\(.*\\))?\\s*\\B[-=]>';
+ var PARAMS = {
+ className: 'params',
+ begin: '\\([^\\(]', returnBegin: true,
+ /* We need another contained nameless mode to not have every nested
+ pair of parens to be called "params" */
+ contains: [{
+ begin: /\(/, end: /\)/,
+ keywords: KEYWORDS,
+ contains: ['self'].concat(EXPRESSIONS)
+ }]
+ };
+
+ return {
+ aliases: ['coffee', 'cson', 'iced'],
+ keywords: KEYWORDS,
+ illegal: /\/\*/,
+ contains: EXPRESSIONS.concat([
+ hljs.COMMENT('###', '###'),
+ hljs.HASH_COMMENT_MODE,
+ {
+ className: 'function',
+ begin: '^\\s*' + JS_IDENT_RE + '\\s*=\\s*' + PARAMS_RE, end: '[-=]>',
+ returnBegin: true,
+ contains: [TITLE, PARAMS]
+ },
+ {
+ // anonymous function start
+ begin: /[:\(,=]\s*/,
+ relevance: 0,
+ contains: [
+ {
+ className: 'function',
+ begin: PARAMS_RE, end: '[-=]>',
+ returnBegin: true,
+ contains: [PARAMS]
+ }
+ ]
+ },
+ {
+ className: 'class',
+ beginKeywords: 'class',
+ end: '$',
+ illegal: /[:="\[\]]/,
+ contains: [
+ {
+ beginKeywords: 'extends',
+ endsWithParent: true,
+ illegal: /[:="\[\]]/,
+ contains: [TITLE]
+ },
+ TITLE
+ ]
+ },
+ {
+ begin: JS_IDENT_RE + ':', end: ':',
+ returnBegin: true, returnEnd: true,
+ relevance: 0
+ }
+ ])
+ };
+});
+
+hljs.registerLanguage("coq",
+/*
+Language: Coq
+Author: Stephan Boyer <stephan@stephanboyer.com>
+Category: functional
+*/
+
+function(hljs) {
+ return {
+ keywords: {
+ keyword:
+ '_ as at cofix else end exists exists2 fix for forall fun if IF in let ' +
+ 'match mod Prop return Set then Type using where with ' +
+ 'Abort About Add Admit Admitted All Arguments Assumptions Axiom Back BackTo ' +
+ 'Backtrack Bind Blacklist Canonical Cd Check Class Classes Close Coercion ' +
+ 'Coercions CoFixpoint CoInductive Collection Combined Compute Conjecture ' +
+ 'Conjectures Constant constr Constraint Constructors Context Corollary ' +
+ 'CreateHintDb Cut Declare Defined Definition Delimit Dependencies Dependent' +
+ 'Derive Drop eauto End Equality Eval Example Existential Existentials ' +
+ 'Existing Export exporting Extern Extract Extraction Fact Field Fields File ' +
+ 'Fixpoint Focus for From Function Functional Generalizable Global Goal Grab ' +
+ 'Grammar Graph Guarded Heap Hint HintDb Hints Hypotheses Hypothesis ident ' +
+ 'Identity If Immediate Implicit Import Include Inductive Infix Info Initial ' +
+ 'Inline Inspect Instance Instances Intro Intros Inversion Inversion_clear ' +
+ 'Language Left Lemma Let Libraries Library Load LoadPath Local Locate Ltac ML ' +
+ 'Mode Module Modules Monomorphic Morphism Next NoInline Notation Obligation ' +
+ 'Obligations Opaque Open Optimize Options Parameter Parameters Parametric ' +
+ 'Path Paths pattern Polymorphic Preterm Print Printing Program Projections ' +
+ 'Proof Proposition Pwd Qed Quit Rec Record Recursive Redirect Relation Remark ' +
+ 'Remove Require Reserved Reset Resolve Restart Rewrite Right Ring Rings Save ' +
+ 'Scheme Scope Scopes Script Search SearchAbout SearchHead SearchPattern ' +
+ 'SearchRewrite Section Separate Set Setoid Show Solve Sorted Step Strategies ' +
+ 'Strategy Structure SubClass Table Tables Tactic Term Test Theorem Time ' +
+ 'Timeout Transparent Type Typeclasses Types Undelimit Undo Unfocus Unfocused ' +
+ 'Unfold Universe Universes Unset Unshelve using Variable Variables Variant ' +
+ 'Verbose Visibility where with',
+ built_in:
+ 'abstract absurd admit after apply as assert assumption at auto autorewrite ' +
+ 'autounfold before bottom btauto by case case_eq cbn cbv change ' +
+ 'classical_left classical_right clear clearbody cofix compare compute ' +
+ 'congruence constr_eq constructor contradict contradiction cut cutrewrite ' +
+ 'cycle decide decompose dependent destruct destruction dintuition ' +
+ 'discriminate discrR do double dtauto eapply eassumption eauto ecase ' +
+ 'econstructor edestruct ediscriminate eelim eexact eexists einduction ' +
+ 'einjection eleft elim elimtype enough equality erewrite eright ' +
+ 'esimplify_eq esplit evar exact exactly_once exfalso exists f_equal fail ' +
+ 'field field_simplify field_simplify_eq first firstorder fix fold fourier ' +
+ 'functional generalize generalizing gfail give_up has_evar hnf idtac in ' +
+ 'induction injection instantiate intro intro_pattern intros intuition ' +
+ 'inversion inversion_clear is_evar is_var lapply lazy left lia lra move ' +
+ 'native_compute nia nsatz omega once pattern pose progress proof psatz quote ' +
+ 'record red refine reflexivity remember rename repeat replace revert ' +
+ 'revgoals rewrite rewrite_strat right ring ring_simplify rtauto set ' +
+ 'setoid_reflexivity setoid_replace setoid_rewrite setoid_symmetry ' +
+ 'setoid_transitivity shelve shelve_unifiable simpl simple simplify_eq solve ' +
+ 'specialize split split_Rabs split_Rmult stepl stepr subst sum swap ' +
+ 'symmetry tactic tauto time timeout top transitivity trivial try tryif ' +
+ 'unfold unify until using vm_compute with'
+ },
+ contains: [
+ hljs.QUOTE_STRING_MODE,
+ hljs.COMMENT('\\(\\*', '\\*\\)'),
+ hljs.C_NUMBER_MODE,
+ {
+ className: 'type',
+ excludeBegin: true,
+ begin: '\\|\\s*',
+ end: '\\w+'
+ },
+ {begin: /[-=]>/} // relevance booster
+ ]
+ };
+});
+
+hljs.registerLanguage("cos",
+/*
+Language: Caché Object Script
+Author: Nikita Savchenko <zitros.lab@gmail.com>
+Category: enterprise, scripting
+*/
+function cos (hljs) {
+
+ var STRINGS = {
+ className: 'string',
+ variants: [
+ {
+ begin: '"',
+ end: '"',
+ contains: [{ // escaped
+ begin: "\"\"",
+ relevance: 0
+ }]
+ }
+ ]
+ };
+
+ var NUMBERS = {
+ className: "number",
+ begin: "\\b(\\d+(\\.\\d*)?|\\.\\d+)",
+ relevance: 0
+ };
+
+ var COS_KEYWORDS =
+ 'property parameter class classmethod clientmethod extends as break ' +
+ 'catch close continue do d|0 else elseif for goto halt hang h|0 if job ' +
+ 'j|0 kill k|0 lock l|0 merge new open quit q|0 read r|0 return set s|0 ' +
+ 'tcommit throw trollback try tstart use view while write w|0 xecute x|0 ' +
+ 'zkill znspace zn ztrap zwrite zw zzdump zzwrite print zbreak zinsert ' +
+ 'zload zprint zremove zsave zzprint mv mvcall mvcrt mvdim mvprint zquit ' +
+ 'zsync ascii';
+
+ // registered function - no need in them due to all functions are highlighted,
+ // but I'll just leave this here.
+
+ //"$bit", "$bitcount",
+ //"$bitfind", "$bitlogic", "$case", "$char", "$classmethod", "$classname",
+ //"$compile", "$data", "$decimal", "$double", "$extract", "$factor",
+ //"$find", "$fnumber", "$get", "$increment", "$inumber", "$isobject",
+ //"$isvaliddouble", "$isvalidnum", "$justify", "$length", "$list",
+ //"$listbuild", "$listdata", "$listfind", "$listfromstring", "$listget",
+ //"$listlength", "$listnext", "$listsame", "$listtostring", "$listvalid",
+ //"$locate", "$match", "$method", "$name", "$nconvert", "$next",
+ //"$normalize", "$now", "$number", "$order", "$parameter", "$piece",
+ //"$prefetchoff", "$prefetchon", "$property", "$qlength", "$qsubscript",
+ //"$query", "$random", "$replace", "$reverse", "$sconvert", "$select",
+ //"$sortbegin", "$sortend", "$stack", "$text", "$translate", "$view",
+ //"$wascii", "$wchar", "$wextract", "$wfind", "$wiswide", "$wlength",
+ //"$wreverse", "$xecute", "$zabs", "$zarccos", "$zarcsin", "$zarctan",
+ //"$zcos", "$zcot", "$zcsc", "$zdate", "$zdateh", "$zdatetime",
+ //"$zdatetimeh", "$zexp", "$zhex", "$zln", "$zlog", "$zpower", "$zsec",
+ //"$zsin", "$zsqr", "$ztan", "$ztime", "$ztimeh", "$zboolean",
+ //"$zconvert", "$zcrc", "$zcyc", "$zdascii", "$zdchar", "$zf",
+ //"$ziswide", "$zlascii", "$zlchar", "$zname", "$zposition", "$zqascii",
+ //"$zqchar", "$zsearch", "$zseek", "$zstrip", "$zwascii", "$zwchar",
+ //"$zwidth", "$zwpack", "$zwbpack", "$zwunpack", "$zwbunpack", "$zzenkaku",
+ //"$change", "$mv", "$mvat", "$mvfmt", "$mvfmts", "$mviconv",
+ //"$mviconvs", "$mvinmat", "$mvlover", "$mvoconv", "$mvoconvs", "$mvraise",
+ //"$mvtrans", "$mvv", "$mvname", "$zbitand", "$zbitcount", "$zbitfind",
+ //"$zbitget", "$zbitlen", "$zbitnot", "$zbitor", "$zbitset", "$zbitstr",
+ //"$zbitxor", "$zincrement", "$znext", "$zorder", "$zprevious", "$zsort",
+ //"device", "$ecode", "$estack", "$etrap", "$halt", "$horolog",
+ //"$io", "$job", "$key", "$namespace", "$principal", "$quit", "$roles",
+ //"$storage", "$system", "$test", "$this", "$tlevel", "$username",
+ //"$x", "$y", "$za", "$zb", "$zchild", "$zeof", "$zeos", "$zerror",
+ //"$zhorolog", "$zio", "$zjob", "$zmode", "$znspace", "$zparent", "$zpi",
+ //"$zpos", "$zreference", "$zstorage", "$ztimestamp", "$ztimezone",
+ //"$ztrap", "$zversion"
+
+ return {
+ case_insensitive: true,
+ aliases: ["cos", "cls"],
+ keywords: COS_KEYWORDS,
+ contains: [
+ NUMBERS,
+ STRINGS,
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ {
+ className: "comment",
+ begin: /;/, end: "$",
+ relevance: 0
+ },
+ { // Functions and user-defined functions: write $ztime(60*60*3), $$myFunc(10), $$^Val(1)
+ className: "built_in",
+ begin: /(?:\$\$?|\.\.)\^?[a-zA-Z]+/
+ },
+ { // Macro command: quit $$$OK
+ className: "built_in",
+ begin: /\$\$\$[a-zA-Z]+/
+ },
+ { // Special (global) variables: write %request.Content; Built-in classes: %Library.Integer
+ className: "built_in",
+ begin: /%[a-z]+(?:\.[a-z]+)*/
+ },
+ { // Global variable: set ^globalName = 12 write ^globalName
+ className: "symbol",
+ begin: /\^%?[a-zA-Z][\w]*/
+ },
+ { // Some control constructions: do ##class(Package.ClassName).Method(), ##super()
+ className: "keyword",
+ begin: /##class|##super|#define|#dim/
+ },
+
+ // sub-languages: are not fully supported by hljs by 11/15/2015
+ // left for the future implementation.
+ {
+ begin: /&sql\(/, end: /\)/,
+ excludeBegin: true, excludeEnd: true,
+ subLanguage: "sql"
+ },
+ {
+ begin: /&(js|jscript|javascript)</, end: />/,
+ excludeBegin: true, excludeEnd: true,
+ subLanguage: "javascript"
+ },
+ {
+ // this brakes first and last tag, but this is the only way to embed a valid html
+ begin: /&html<\s*</, end: />\s*>/,
+ subLanguage: "xml"
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("crmsh",
+/*
+Language: crmsh
+Author: Kristoffer Gronlund <kgronlund@suse.com>
+Website: http://crmsh.github.io
+Description: Syntax Highlighting for the crmsh DSL
+Category: config
+*/
+
+function(hljs) {
+ var RESOURCES = 'primitive rsc_template';
+
+ var COMMANDS = 'group clone ms master location colocation order fencing_topology ' +
+ 'rsc_ticket acl_target acl_group user role ' +
+ 'tag xml';
+
+ var PROPERTY_SETS = 'property rsc_defaults op_defaults';
+
+ var KEYWORDS = 'params meta operations op rule attributes utilization';
+
+ var OPERATORS = 'read write deny defined not_defined in_range date spec in ' +
+ 'ref reference attribute type xpath version and or lt gt tag ' +
+ 'lte gte eq ne \\';
+
+ var TYPES = 'number string';
+
+ var LITERALS = 'Master Started Slave Stopped start promote demote stop monitor true false';
+
+ return {
+ aliases: ['crm', 'pcmk'],
+ case_insensitive: true,
+ keywords: {
+ keyword: KEYWORDS + ' ' + OPERATORS + ' ' + TYPES,
+ literal: LITERALS
+ },
+ contains: [
+ hljs.HASH_COMMENT_MODE,
+ {
+ beginKeywords: 'node',
+ starts: {
+ end: '\\s*([\\w_-]+:)?',
+ starts: {
+ className: 'title',
+ end: '\\s*[\\$\\w_][\\w_-]*'
+ }
+ }
+ },
+ {
+ beginKeywords: RESOURCES,
+ starts: {
+ className: 'title',
+ end: '\\s*[\\$\\w_][\\w_-]*',
+ starts: {
+ end: '\\s*@?[\\w_][\\w_\\.:-]*'
+ }
+ }
+ },
+ {
+ begin: '\\b(' + COMMANDS.split(' ').join('|') + ')\\s+',
+ keywords: COMMANDS,
+ starts: {
+ className: 'title',
+ end: '[\\$\\w_][\\w_-]*'
+ }
+ },
+ {
+ beginKeywords: PROPERTY_SETS,
+ starts: {
+ className: 'title',
+ end: '\\s*([\\w_-]+:)?'
+ }
+ },
+ hljs.QUOTE_STRING_MODE,
+ {
+ className: 'meta',
+ begin: '(ocf|systemd|service|lsb):[\\w_:-]+',
+ relevance: 0
+ },
+ {
+ className: 'number',
+ begin: '\\b\\d+(\\.\\d+)?(ms|s|h|m)?',
+ relevance: 0
+ },
+ {
+ className: 'literal',
+ begin: '[-]?(infinity|inf)',
+ relevance: 0
+ },
+ {
+ className: 'attr',
+ begin: /([A-Za-z\$_\#][\w_-]+)=/,
+ relevance: 0
+ },
+ {
+ className: 'tag',
+ begin: '</?',
+ end: '/?>',
+ relevance: 0
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("crystal",
+/*
+Language: Crystal
+Author: TSUYUSATO Kitsune <make.just.on@gmail.com>
+*/
+
+function(hljs) {
+ var NUM_SUFFIX = '(_[uif](8|16|32|64))?';
+ var CRYSTAL_IDENT_RE = '[a-zA-Z_]\\w*[!?=]?';
+ var RE_STARTER = '!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|' +
+ '>>|>|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~';
+ var CRYSTAL_METHOD_RE = '[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\][=?]?';
+ var CRYSTAL_KEYWORDS = {
+ keyword:
+ 'abstract alias as asm begin break case class def do else elsif end ensure enum extend for fun if ifdef ' +
+ 'include instance_sizeof is_a? lib macro module next of out pointerof private protected rescue responds_to? ' +
+ 'return require self sizeof struct super then type typeof union unless until when while with yield ' +
+ '__DIR__ __FILE__ __LINE__',
+ literal: 'false nil true'
+ };
+ var SUBST = {
+ className: 'subst',
+ begin: '#{', end: '}',
+ keywords: CRYSTAL_KEYWORDS
+ };
+ var EXPANSION = {
+ className: 'template-variable',
+ variants: [
+ {begin: '\\{\\{', end: '\\}\\}'},
+ {begin: '\\{%', end: '%\\}'}
+ ],
+ keywords: CRYSTAL_KEYWORDS
+ };
+
+ function recursiveParen(begin, end) {
+ var
+ contains = [{begin: begin, end: end}];
+ contains[0].contains = contains;
+ return contains;
+ }
+ var STRING = {
+ className: 'string',
+ contains: [hljs.BACKSLASH_ESCAPE, SUBST],
+ variants: [
+ {begin: /'/, end: /'/},
+ {begin: /"/, end: /"/},
+ {begin: /`/, end: /`/},
+ {begin: '%w?\\(', end: '\\)', contains: recursiveParen('\\(', '\\)')},
+ {begin: '%w?\\[', end: '\\]', contains: recursiveParen('\\[', '\\]')},
+ {begin: '%w?{', end: '}', contains: recursiveParen('{', '}')},
+ {begin: '%w?<', end: '>', contains: recursiveParen('<', '>')},
+ {begin: '%w?/', end: '/'},
+ {begin: '%w?%', end: '%'},
+ {begin: '%w?-', end: '-'},
+ {begin: '%w?\\|', end: '\\|'},
+ ],
+ relevance: 0,
+ };
+ var REGEXP = {
+ begin: '(' + RE_STARTER + ')\\s*',
+ contains: [
+ {
+ className: 'regexp',
+ contains: [hljs.BACKSLASH_ESCAPE, SUBST],
+ variants: [
+ {begin: '//[a-z]*', relevance: 0},
+ {begin: '/', end: '/[a-z]*'},
+ {begin: '%r\\(', end: '\\)', contains: recursiveParen('\\(', '\\)')},
+ {begin: '%r\\[', end: '\\]', contains: recursiveParen('\\[', '\\]')},
+ {begin: '%r{', end: '}', contains: recursiveParen('{', '}')},
+ {begin: '%r<', end: '>', contains: recursiveParen('<', '>')},
+ {begin: '%r/', end: '/'},
+ {begin: '%r%', end: '%'},
+ {begin: '%r-', end: '-'},
+ {begin: '%r\\|', end: '\\|'},
+ ]
+ }
+ ],
+ relevance: 0
+ };
+ var REGEXP2 = {
+ className: 'regexp',
+ contains: [hljs.BACKSLASH_ESCAPE, SUBST],
+ variants: [
+ {begin: '%r\\(', end: '\\)', contains: recursiveParen('\\(', '\\)')},
+ {begin: '%r\\[', end: '\\]', contains: recursiveParen('\\[', '\\]')},
+ {begin: '%r{', end: '}', contains: recursiveParen('{', '}')},
+ {begin: '%r<', end: '>', contains: recursiveParen('<', '>')},
+ {begin: '%r/', end: '/'},
+ {begin: '%r%', end: '%'},
+ {begin: '%r-', end: '-'},
+ {begin: '%r\\|', end: '\\|'},
+ ],
+ relevance: 0
+ };
+ var ATTRIBUTE = {
+ className: 'meta',
+ begin: '@\\[', end: '\\]',
+ contains: [
+ hljs.inherit(hljs.QUOTE_STRING_MODE, {className: 'meta-string'})
+ ]
+ };
+ var CRYSTAL_DEFAULT_CONTAINS = [
+ EXPANSION,
+ STRING,
+ REGEXP,
+ REGEXP2,
+ ATTRIBUTE,
+ hljs.HASH_COMMENT_MODE,
+ {
+ className: 'class',
+ beginKeywords: 'class module struct', end: '$|;',
+ illegal: /=/,
+ contains: [
+ hljs.HASH_COMMENT_MODE,
+ hljs.inherit(hljs.TITLE_MODE, {begin: '[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?'}),
+ {begin: '<'} // relevance booster for inheritance
+ ]
+ },
+ {
+ className: 'class',
+ beginKeywords: 'lib enum union', end: '$|;',
+ illegal: /=/,
+ contains: [
+ hljs.HASH_COMMENT_MODE,
+ hljs.inherit(hljs.TITLE_MODE, {begin: '[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?'}),
+ ],
+ relevance: 10
+ },
+ {
+ className: 'function',
+ beginKeywords: 'def', end: /\B\b/,
+ contains: [
+ hljs.inherit(hljs.TITLE_MODE, {
+ begin: CRYSTAL_METHOD_RE,
+ endsParent: true
+ })
+ ]
+ },
+ {
+ className: 'function',
+ beginKeywords: 'fun macro', end: /\B\b/,
+ contains: [
+ hljs.inherit(hljs.TITLE_MODE, {
+ begin: CRYSTAL_METHOD_RE,
+ endsParent: true
+ })
+ ],
+ relevance: 5
+ },
+ {
+ className: 'symbol',
+ begin: hljs.UNDERSCORE_IDENT_RE + '(\\!|\\?)?:',
+ relevance: 0
+ },
+ {
+ className: 'symbol',
+ begin: ':',
+ contains: [STRING, {begin: CRYSTAL_METHOD_RE}],
+ relevance: 0
+ },
+ {
+ className: 'number',
+ variants: [
+ { begin: '\\b0b([01_]*[01])' + NUM_SUFFIX },
+ { begin: '\\b0o([0-7_]*[0-7])' + NUM_SUFFIX },
+ { begin: '\\b0x([A-Fa-f0-9_]*[A-Fa-f0-9])' + NUM_SUFFIX },
+ { begin: '\\b(([0-9][0-9_]*[0-9]|[0-9])(\\.[0-9_]*[0-9])?([eE][+-]?[0-9_]*[0-9])?)' + NUM_SUFFIX}
+ ],
+ relevance: 0
+ }
+ ];
+ SUBST.contains = CRYSTAL_DEFAULT_CONTAINS;
+ EXPANSION.contains = CRYSTAL_DEFAULT_CONTAINS.slice(1); // without EXPANSION
+
+ return {
+ aliases: ['cr'],
+ lexemes: CRYSTAL_IDENT_RE,
+ keywords: CRYSTAL_KEYWORDS,
+ contains: CRYSTAL_DEFAULT_CONTAINS
+ };
+});
+
+hljs.registerLanguage("cs",
+/*
+Language: C#
+Author: Jason Diamond <jason@diamond.name>
+Category: common
+*/
+
+function(hljs) {
+ var KEYWORDS = {
+ keyword:
+ // Normal keywords.
+ 'abstract as base bool break byte case catch char checked const continue decimal dynamic ' +
+ 'default delegate do double else enum event explicit extern finally fixed float ' +
+ 'for foreach goto if implicit in int interface internal is lock long when ' +
+ 'object operator out override params private protected public readonly ref sbyte ' +
+ 'sealed short sizeof stackalloc static string struct switch this try typeof ' +
+ 'uint ulong unchecked unsafe ushort using virtual volatile void while async ' +
+ 'nameof ' +
+ // Contextual keywords.
+ 'ascending descending from get group into join let orderby partial select set value var ' +
+ 'where yield',
+ literal:
+ 'null false true'
+ };
+
+ var VERBATIM_STRING = {
+ className: 'string',
+ begin: '@"', end: '"',
+ contains: [{begin: '""'}]
+ };
+ var VERBATIM_STRING_NO_LF = hljs.inherit(VERBATIM_STRING, {illegal: /\n/});
+ var SUBST = {
+ className: 'subst',
+ begin: '{', end: '}',
+ keywords: KEYWORDS
+ };
+ var SUBST_NO_LF = hljs.inherit(SUBST, {illegal: /\n/});
+ var INTERPOLATED_STRING = {
+ className: 'string',
+ begin: /\$"/, end: '"',
+ illegal: /\n/,
+ contains: [{begin: '{{'}, {begin: '}}'}, hljs.BACKSLASH_ESCAPE, SUBST_NO_LF]
+ };
+ var INTERPOLATED_VERBATIM_STRING = {
+ className: 'string',
+ begin: /\$@"/, end: '"',
+ contains: [{begin: '{{'}, {begin: '}}'}, {begin: '""'}, SUBST]
+ };
+ var INTERPOLATED_VERBATIM_STRING_NO_LF = hljs.inherit(INTERPOLATED_VERBATIM_STRING, {
+ illegal: /\n/,
+ contains: [{begin: '{{'}, {begin: '}}'}, {begin: '""'}, SUBST_NO_LF]
+ });
+ SUBST.contains = [
+ INTERPOLATED_VERBATIM_STRING,
+ INTERPOLATED_STRING,
+ VERBATIM_STRING,
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.C_NUMBER_MODE,
+ hljs.C_BLOCK_COMMENT_MODE
+ ];
+ SUBST_NO_LF.contains = [
+ INTERPOLATED_VERBATIM_STRING_NO_LF,
+ INTERPOLATED_STRING,
+ VERBATIM_STRING_NO_LF,
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.C_NUMBER_MODE,
+ hljs.inherit(hljs.C_BLOCK_COMMENT_MODE, {illegal: /\n/})
+ ];
+ var STRING = {
+ variants: [
+ INTERPOLATED_VERBATIM_STRING,
+ INTERPOLATED_STRING,
+ VERBATIM_STRING,
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE
+ ]
+ };
+
+ var TYPE_IDENT_RE = hljs.IDENT_RE + '(<' + hljs.IDENT_RE + '>)?(\\[\\])?';
+ return {
+ aliases: ['csharp'],
+ keywords: KEYWORDS,
+ illegal: /::/,
+ contains: [
+ hljs.COMMENT(
+ '///',
+ '$',
+ {
+ returnBegin: true,
+ contains: [
+ {
+ className: 'doctag',
+ variants: [
+ {
+ begin: '///', relevance: 0
+ },
+ {
+ begin: '<!--|-->'
+ },
+ {
+ begin: '</?', end: '>'
+ }
+ ]
+ }
+ ]
+ }
+ ),
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ {
+ className: 'meta',
+ begin: '#', end: '$',
+ keywords: {'meta-keyword': 'if else elif endif define undef warning error line region endregion pragma checksum'}
+ },
+ STRING,
+ hljs.C_NUMBER_MODE,
+ {
+ beginKeywords: 'class interface', end: /[{;=]/,
+ illegal: /[^\s:]/,
+ contains: [
+ hljs.TITLE_MODE,
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE
+ ]
+ },
+ {
+ beginKeywords: 'namespace', end: /[{;=]/,
+ illegal: /[^\s:]/,
+ contains: [
+ hljs.inherit(hljs.TITLE_MODE, {begin: '[a-zA-Z](\\.?\\w)*'}),
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE
+ ]
+ },
+ {
+ // Expression keywords prevent 'keyword Name(...)' from being
+ // recognized as a function definition
+ beginKeywords: 'new return throw await',
+ relevance: 0
+ },
+ {
+ className: 'function',
+ begin: '(' + TYPE_IDENT_RE + '\\s+)+' + hljs.IDENT_RE + '\\s*\\(', returnBegin: true, end: /[{;=]/,
+ excludeEnd: true,
+ keywords: KEYWORDS,
+ contains: [
+ {
+ begin: hljs.IDENT_RE + '\\s*\\(', returnBegin: true,
+ contains: [hljs.TITLE_MODE],
+ relevance: 0
+ },
+ {
+ className: 'params',
+ begin: /\(/, end: /\)/,
+ excludeBegin: true,
+ excludeEnd: true,
+ keywords: KEYWORDS,
+ relevance: 0,
+ contains: [
+ STRING,
+ hljs.C_NUMBER_MODE,
+ hljs.C_BLOCK_COMMENT_MODE
+ ]
+ },
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE
+ ]
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("csp",
+/*
+Language: CSP
+Description: Content Security Policy definition highlighting
+Author: Taras <oxdef@oxdef.info>
+
+vim: ts=2 sw=2 st=2
+*/
+
+function(hljs) {
+ return {
+ case_insensitive: false,
+ lexemes: '[a-zA-Z][a-zA-Z0-9_-]*',
+ keywords: {
+ keyword: 'base-uri child-src connect-src default-src font-src form-action' +
+ ' frame-ancestors frame-src img-src media-src object-src plugin-types' +
+ ' report-uri sandbox script-src style-src',
+ },
+ contains: [
+ {
+ className: 'string',
+ begin: "'", end: "'"
+ },
+ {
+ className: 'attribute',
+ begin: '^Content', end: ':', excludeEnd: true,
+ },
+ ]
+ };
+});
+
+hljs.registerLanguage("css",
+/*
+Language: CSS
+Category: common, css
+*/
+
+function(hljs) {
+ var IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';
+ var RULE = {
+ begin: /[A-Z\_\.\-]+\s*:/, returnBegin: true, end: ';', endsWithParent: true,
+ contains: [
+ {
+ className: 'attribute',
+ begin: /\S/, end: ':', excludeEnd: true,
+ starts: {
+ endsWithParent: true, excludeEnd: true,
+ contains: [
+ {
+ begin: /[\w-]+\(/, returnBegin: true,
+ contains: [
+ {
+ className: 'built_in',
+ begin: /[\w-]+/
+ },
+ {
+ begin: /\(/, end: /\)/,
+ contains: [
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE
+ ]
+ }
+ ]
+ },
+ hljs.CSS_NUMBER_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.APOS_STRING_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ {
+ className: 'number', begin: '#[0-9A-Fa-f]+'
+ },
+ {
+ className: 'meta', begin: '!important'
+ }
+ ]
+ }
+ }
+ ]
+ };
+
+ return {
+ case_insensitive: true,
+ illegal: /[=\/|'\$]/,
+ contains: [
+ hljs.C_BLOCK_COMMENT_MODE,
+ {
+ className: 'selector-id', begin: /#[A-Za-z0-9_-]+/
+ },
+ {
+ className: 'selector-class', begin: /\.[A-Za-z0-9_-]+/
+ },
+ {
+ className: 'selector-attr',
+ begin: /\[/, end: /\]/,
+ illegal: '$'
+ },
+ {
+ className: 'selector-pseudo',
+ begin: /:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/
+ },
+ {
+ begin: '@(font-face|page)',
+ lexemes: '[a-z-]+',
+ keywords: 'font-face page'
+ },
+ {
+ begin: '@', end: '[{;]', // at_rule eating first "{" is a good thing
+ // because it doesn’t let it to be parsed as
+ // a rule set but instead drops parser into
+ // the default mode which is how it should be.
+ illegal: /:/, // break on Less variables @var: ...
+ contains: [
+ {
+ className: 'keyword',
+ begin: /\w+/
+ },
+ {
+ begin: /\s/, endsWithParent: true, excludeEnd: true,
+ relevance: 0,
+ contains: [
+ hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE,
+ hljs.CSS_NUMBER_MODE
+ ]
+ }
+ ]
+ },
+ {
+ className: 'selector-tag', begin: IDENT_RE,
+ relevance: 0
+ },
+ {
+ begin: '{', end: '}',
+ illegal: /\S/,
+ contains: [
+ hljs.C_BLOCK_COMMENT_MODE,
+ RULE,
+ ]
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("d",
+/*
+Language: D
+Author: Aleksandar Ruzicic <aleksandar@ruzicic.info>
+Description: D is a language with C-like syntax and static typing. It pragmatically combines efficiency, control, and modeling power, with safety and programmer productivity.
+Version: 1.0a
+Date: 2012-04-08
+*/
+
+/**
+ * Known issues:
+ *
+ * - invalid hex string literals will be recognized as a double quoted strings
+ * but 'x' at the beginning of string will not be matched
+ *
+ * - delimited string literals are not checked for matching end delimiter
+ * (not possible to do with js regexp)
+ *
+ * - content of token string is colored as a string (i.e. no keyword coloring inside a token string)
+ * also, content of token string is not validated to contain only valid D tokens
+ *
+ * - special token sequence rule is not strictly following D grammar (anything following #line
+ * up to the end of line is matched as special token sequence)
+ */
+
+function(hljs) {
+ /**
+ * Language keywords
+ *
+ * @type {Object}
+ */
+ var D_KEYWORDS = {
+ keyword:
+ 'abstract alias align asm assert auto body break byte case cast catch class ' +
+ 'const continue debug default delete deprecated do else enum export extern final ' +
+ 'finally for foreach foreach_reverse|10 goto if immutable import in inout int ' +
+ 'interface invariant is lazy macro mixin module new nothrow out override package ' +
+ 'pragma private protected public pure ref return scope shared static struct ' +
+ 'super switch synchronized template this throw try typedef typeid typeof union ' +
+ 'unittest version void volatile while with __FILE__ __LINE__ __gshared|10 ' +
+ '__thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__',
+ built_in:
+ 'bool cdouble cent cfloat char creal dchar delegate double dstring float function ' +
+ 'idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar ' +
+ 'wstring',
+ literal:
+ 'false null true'
+ };
+
+ /**
+ * Number literal regexps
+ *
+ * @type {String}
+ */
+ var decimal_integer_re = '(0|[1-9][\\d_]*)',
+ decimal_integer_nosus_re = '(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)',
+ binary_integer_re = '0[bB][01_]+',
+ hexadecimal_digits_re = '([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)',
+ hexadecimal_integer_re = '0[xX]' + hexadecimal_digits_re,
+
+ decimal_exponent_re = '([eE][+-]?' + decimal_integer_nosus_re + ')',
+ decimal_float_re = '(' + decimal_integer_nosus_re + '(\\.\\d*|' + decimal_exponent_re + ')|' +
+ '\\d+\\.' + decimal_integer_nosus_re + decimal_integer_nosus_re + '|' +
+ '\\.' + decimal_integer_re + decimal_exponent_re + '?' +
+ ')',
+ hexadecimal_float_re = '(0[xX](' +
+ hexadecimal_digits_re + '\\.' + hexadecimal_digits_re + '|'+
+ '\\.?' + hexadecimal_digits_re +
+ ')[pP][+-]?' + decimal_integer_nosus_re + ')',
+
+ integer_re = '(' +
+ decimal_integer_re + '|' +
+ binary_integer_re + '|' +
+ hexadecimal_integer_re +
+ ')',
+
+ float_re = '(' +
+ hexadecimal_float_re + '|' +
+ decimal_float_re +
+ ')';
+
+ /**
+ * Escape sequence supported in D string and character literals
+ *
+ * @type {String}
+ */
+ var escape_sequence_re = '\\\\(' +
+ '[\'"\\?\\\\abfnrtv]|' + // common escapes
+ 'u[\\dA-Fa-f]{4}|' + // four hex digit unicode codepoint
+ '[0-7]{1,3}|' + // one to three octal digit ascii char code
+ 'x[\\dA-Fa-f]{2}|' + // two hex digit ascii char code
+ 'U[\\dA-Fa-f]{8}' + // eight hex digit unicode codepoint
+ ')|' +
+ '&[a-zA-Z\\d]{2,};'; // named character entity
+
+ /**
+ * D integer number literals
+ *
+ * @type {Object}
+ */
+ var D_INTEGER_MODE = {
+ className: 'number',
+ begin: '\\b' + integer_re + '(L|u|U|Lu|LU|uL|UL)?',
+ relevance: 0
+ };
+
+ /**
+ * [D_FLOAT_MODE description]
+ * @type {Object}
+ */
+ var D_FLOAT_MODE = {
+ className: 'number',
+ begin: '\\b(' +
+ float_re + '([fF]|L|i|[fF]i|Li)?|' +
+ integer_re + '(i|[fF]i|Li)' +
+ ')',
+ relevance: 0
+ };
+
+ /**
+ * D character literal
+ *
+ * @type {Object}
+ */
+ var D_CHARACTER_MODE = {
+ className: 'string',
+ begin: '\'(' + escape_sequence_re + '|.)', end: '\'',
+ illegal: '.'
+ };
+
+ /**
+ * D string escape sequence
+ *
+ * @type {Object}
+ */
+ var D_ESCAPE_SEQUENCE = {
+ begin: escape_sequence_re,
+ relevance: 0
+ };
+
+ /**
+ * D double quoted string literal
+ *
+ * @type {Object}
+ */
+ var D_STRING_MODE = {
+ className: 'string',
+ begin: '"',
+ contains: [D_ESCAPE_SEQUENCE],
+ end: '"[cwd]?'
+ };
+
+ /**
+ * D wysiwyg and delimited string literals
+ *
+ * @type {Object}
+ */
+ var D_WYSIWYG_DELIMITED_STRING_MODE = {
+ className: 'string',
+ begin: '[rq]"',
+ end: '"[cwd]?',
+ relevance: 5
+ };
+
+ /**
+ * D alternate wysiwyg string literal
+ *
+ * @type {Object}
+ */
+ var D_ALTERNATE_WYSIWYG_STRING_MODE = {
+ className: 'string',
+ begin: '`',
+ end: '`[cwd]?'
+ };
+
+ /**
+ * D hexadecimal string literal
+ *
+ * @type {Object}
+ */
+ var D_HEX_STRING_MODE = {
+ className: 'string',
+ begin: 'x"[\\da-fA-F\\s\\n\\r]*"[cwd]?',
+ relevance: 10
+ };
+
+ /**
+ * D delimited string literal
+ *
+ * @type {Object}
+ */
+ var D_TOKEN_STRING_MODE = {
+ className: 'string',
+ begin: 'q"\\{',
+ end: '\\}"'
+ };
+
+ /**
+ * Hashbang support
+ *
+ * @type {Object}
+ */
+ var D_HASHBANG_MODE = {
+ className: 'meta',
+ begin: '^#!',
+ end: '$',
+ relevance: 5
+ };
+
+ /**
+ * D special token sequence
+ *
+ * @type {Object}
+ */
+ var D_SPECIAL_TOKEN_SEQUENCE_MODE = {
+ className: 'meta',
+ begin: '#(line)',
+ end: '$',
+ relevance: 5
+ };
+
+ /**
+ * D attributes
+ *
+ * @type {Object}
+ */
+ var D_ATTRIBUTE_MODE = {
+ className: 'keyword',
+ begin: '@[a-zA-Z_][a-zA-Z_\\d]*'
+ };
+
+ /**
+ * D nesting comment
+ *
+ * @type {Object}
+ */
+ var D_NESTING_COMMENT_MODE = hljs.COMMENT(
+ '\\/\\+',
+ '\\+\\/',
+ {
+ contains: ['self'],
+ relevance: 10
+ }
+ );
+
+ return {
+ lexemes: hljs.UNDERSCORE_IDENT_RE,
+ keywords: D_KEYWORDS,
+ contains: [
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ D_NESTING_COMMENT_MODE,
+ D_HEX_STRING_MODE,
+ D_STRING_MODE,
+ D_WYSIWYG_DELIMITED_STRING_MODE,
+ D_ALTERNATE_WYSIWYG_STRING_MODE,
+ D_TOKEN_STRING_MODE,
+ D_FLOAT_MODE,
+ D_INTEGER_MODE,
+ D_CHARACTER_MODE,
+ D_HASHBANG_MODE,
+ D_SPECIAL_TOKEN_SEQUENCE_MODE,
+ D_ATTRIBUTE_MODE
+ ]
+ };
+});
+
+hljs.registerLanguage("markdown",
+/*
+Language: Markdown
+Requires: xml.js
+Author: John Crepezzi <john.crepezzi@gmail.com>
+Website: http://seejohncode.com/
+Category: common, markup
+*/
+
+function(hljs) {
+ return {
+ aliases: ['md', 'mkdown', 'mkd'],
+ contains: [
+ // highlight headers
+ {
+ className: 'section',
+ variants: [
+ { begin: '^#{1,6}', end: '$' },
+ { begin: '^.+?\\n[=-]{2,}$' }
+ ]
+ },
+ // inline html
+ {
+ begin: '<', end: '>',
+ subLanguage: 'xml',
+ relevance: 0
+ },
+ // lists (indicators only)
+ {
+ className: 'bullet',
+ begin: '^([*+-]|(\\d+\\.))\\s+'
+ },
+ // strong segments
+ {
+ className: 'strong',
+ begin: '[*_]{2}.+?[*_]{2}'
+ },
+ // emphasis segments
+ {
+ className: 'emphasis',
+ variants: [
+ { begin: '\\*.+?\\*' },
+ { begin: '_.+?_'
+ , relevance: 0
+ }
+ ]
+ },
+ // blockquotes
+ {
+ className: 'quote',
+ begin: '^>\\s+', end: '$'
+ },
+ // code snippets
+ {
+ className: 'code',
+ variants: [
+ {
+ begin: '^```\w*\s*$', end: '^```\s*$'
+ },
+ {
+ begin: '`.+?`'
+ },
+ {
+ begin: '^( {4}|\t)', end: '$',
+ relevance: 0
+ }
+ ]
+ },
+ // horizontal rules
+ {
+ begin: '^[-\\*]{3,}', end: '$'
+ },
+ // using links - title and link
+ {
+ begin: '\\[.+?\\][\\(\\[].*?[\\)\\]]',
+ returnBegin: true,
+ contains: [
+ {
+ className: 'string',
+ begin: '\\[', end: '\\]',
+ excludeBegin: true,
+ returnEnd: true,
+ relevance: 0
+ },
+ {
+ className: 'link',
+ begin: '\\]\\(', end: '\\)',
+ excludeBegin: true, excludeEnd: true
+ },
+ {
+ className: 'symbol',
+ begin: '\\]\\[', end: '\\]',
+ excludeBegin: true, excludeEnd: true
+ }
+ ],
+ relevance: 10
+ },
+ {
+ begin: /^\[[^\n]+\]:/,
+ returnBegin: true,
+ contains: [
+ {
+ className: 'symbol',
+ begin: /\[/, end: /\]/,
+ excludeBegin: true, excludeEnd: true
+ },
+ {
+ className: 'link',
+ begin: /:\s*/, end: /$/,
+ excludeBegin: true
+ }
+ ]
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("dart",
+/*
+Language: Dart
+Requires: markdown.js
+Author: Maxim Dikun <dikmax@gmail.com>
+Description: Dart is a JavaScript replacement language developed by Google. For more information see http://dartlang.org/
+Category: scripting
+*/
+
+function (hljs) {
+ var SUBST = {
+ className: 'subst',
+ begin: '\\$\\{', end: '}',
+ keywords: 'true false null this is new super'
+ };
+
+ var STRING = {
+ className: 'string',
+ variants: [
+ {
+ begin: 'r\'\'\'', end: '\'\'\''
+ },
+ {
+ begin: 'r"""', end: '"""'
+ },
+ {
+ begin: 'r\'', end: '\'',
+ illegal: '\\n'
+ },
+ {
+ begin: 'r"', end: '"',
+ illegal: '\\n'
+ },
+ {
+ begin: '\'\'\'', end: '\'\'\'',
+ contains: [hljs.BACKSLASH_ESCAPE, SUBST]
+ },
+ {
+ begin: '"""', end: '"""',
+ contains: [hljs.BACKSLASH_ESCAPE, SUBST]
+ },
+ {
+ begin: '\'', end: '\'',
+ illegal: '\\n',
+ contains: [hljs.BACKSLASH_ESCAPE, SUBST]
+ },
+ {
+ begin: '"', end: '"',
+ illegal: '\\n',
+ contains: [hljs.BACKSLASH_ESCAPE, SUBST]
+ }
+ ]
+ };
+ SUBST.contains = [
+ hljs.C_NUMBER_MODE, STRING
+ ];
+
+ var KEYWORDS = {
+ keyword: 'assert async await break case catch class const continue default do else enum extends false final ' +
+ 'finally for if in is new null rethrow return super switch sync this throw true try var void while with yield ' +
+ 'abstract as dynamic export external factory get implements import library operator part set static typedef',
+ built_in:
+ // dart:core
+ 'print Comparable DateTime Duration Function Iterable Iterator List Map Match Null Object Pattern RegExp Set ' +
+ 'Stopwatch String StringBuffer StringSink Symbol Type Uri bool double int num ' +
+ // dart:html
+ 'document window querySelector querySelectorAll Element ElementList'
+ };
+
+ return {
+ keywords: KEYWORDS,
+ contains: [
+ STRING,
+ hljs.COMMENT(
+ '/\\*\\*',
+ '\\*/',
+ {
+ subLanguage: 'markdown'
+ }
+ ),
+ hljs.COMMENT(
+ '///',
+ '$',
+ {
+ subLanguage: 'markdown'
+ }
+ ),
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ {
+ className: 'class',
+ beginKeywords: 'class interface', end: '{', excludeEnd: true,
+ contains: [
+ {
+ beginKeywords: 'extends implements'
+ },
+ hljs.UNDERSCORE_TITLE_MODE
+ ]
+ },
+ hljs.C_NUMBER_MODE,
+ {
+ className: 'meta', begin: '@[A-Za-z]+'
+ },
+ {
+ begin: '=>' // No markup, just a relevance booster
+ }
+ ]
+ }
+});
+
+hljs.registerLanguage("delphi",
+/*
+Language: Delphi
+*/
+
+function(hljs) {
+ var KEYWORDS =
+ 'exports register file shl array record property for mod while set ally label uses raise not ' +
+ 'stored class safecall var interface or private static exit index inherited to else stdcall ' +
+ 'override shr asm far resourcestring finalization packed virtual out and protected library do ' +
+ 'xorwrite goto near function end div overload object unit begin string on inline repeat until ' +
+ 'destructor write message program with read initialization except default nil if case cdecl in ' +
+ 'downto threadvar of try pascal const external constructor type public then implementation ' +
+ 'finally published procedure';
+ var COMMENT_MODES = [
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.COMMENT(
+ /\{/,
+ /\}/,
+ {
+ relevance: 0
+ }
+ ),
+ hljs.COMMENT(
+ /\(\*/,
+ /\*\)/,
+ {
+ relevance: 10
+ }
+ )
+ ];
+ var STRING = {
+ className: 'string',
+ begin: /'/, end: /'/,
+ contains: [{begin: /''/}]
+ };
+ var CHAR_STRING = {
+ className: 'string', begin: /(#\d+)+/
+ };
+ var CLASS = {
+ begin: hljs.IDENT_RE + '\\s*=\\s*class\\s*\\(', returnBegin: true,
+ contains: [
+ hljs.TITLE_MODE
+ ]
+ };
+ var FUNCTION = {
+ className: 'function',
+ beginKeywords: 'function constructor destructor procedure', end: /[:;]/,
+ keywords: 'function constructor|10 destructor|10 procedure|10',
+ contains: [
+ hljs.TITLE_MODE,
+ {
+ className: 'params',
+ begin: /\(/, end: /\)/,
+ keywords: KEYWORDS,
+ contains: [STRING, CHAR_STRING]
+ }
+ ].concat(COMMENT_MODES)
+ };
+ return {
+ aliases: ['dpr', 'dfm', 'pas', 'pascal', 'freepascal', 'lazarus', 'lpr', 'lfm'],
+ case_insensitive: true,
+ keywords: KEYWORDS,
+ illegal: /"|\$[G-Zg-z]|\/\*|<\/|\|/,
+ contains: [
+ STRING, CHAR_STRING,
+ hljs.NUMBER_MODE,
+ CLASS,
+ FUNCTION
+ ].concat(COMMENT_MODES)
+ };
+});
+
+hljs.registerLanguage("diff",
+/*
+Language: Diff
+Description: Unified and context diff
+Author: Vasily Polovnyov <vast@whiteants.net>
+Category: common
+*/
+
+function(hljs) {
+ return {
+ aliases: ['patch'],
+ contains: [
+ {
+ className: 'meta',
+ relevance: 10,
+ variants: [
+ {begin: /^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},
+ {begin: /^\*\*\* +\d+,\d+ +\*\*\*\*$/},
+ {begin: /^\-\-\- +\d+,\d+ +\-\-\-\-$/}
+ ]
+ },
+ {
+ className: 'comment',
+ variants: [
+ {begin: /Index: /, end: /$/},
+ {begin: /={3,}/, end: /$/},
+ {begin: /^\-{3}/, end: /$/},
+ {begin: /^\*{3} /, end: /$/},
+ {begin: /^\+{3}/, end: /$/},
+ {begin: /\*{5}/, end: /\*{5}$/}
+ ]
+ },
+ {
+ className: 'addition',
+ begin: '^\\+', end: '$'
+ },
+ {
+ className: 'deletion',
+ begin: '^\\-', end: '$'
+ },
+ {
+ className: 'addition',
+ begin: '^\\!', end: '$'
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("django",
+/*
+Language: Django
+Requires: xml.js
+Author: Ivan Sagalaev <maniac@softwaremaniacs.org>
+Contributors: Ilya Baryshev <baryshev@gmail.com>
+Category: template
+*/
+
+function(hljs) {
+ var FILTER = {
+ begin: /\|[A-Za-z]+:?/,
+ keywords: {
+ name:
+ 'truncatewords removetags linebreaksbr yesno get_digit timesince random striptags ' +
+ 'filesizeformat escape linebreaks length_is ljust rjust cut urlize fix_ampersands ' +
+ 'title floatformat capfirst pprint divisibleby add make_list unordered_list urlencode ' +
+ 'timeuntil urlizetrunc wordcount stringformat linenumbers slice date dictsort ' +
+ 'dictsortreversed default_if_none pluralize lower join center default ' +
+ 'truncatewords_html upper length phone2numeric wordwrap time addslashes slugify first ' +
+ 'escapejs force_escape iriencode last safe safeseq truncatechars localize unlocalize ' +
+ 'localtime utc timezone'
+ },
+ contains: [
+ hljs.QUOTE_STRING_MODE,
+ hljs.APOS_STRING_MODE
+ ]
+ };
+
+ return {
+ aliases: ['jinja'],
+ case_insensitive: true,
+ subLanguage: 'xml',
+ contains: [
+ hljs.COMMENT(/\{%\s*comment\s*%}/, /\{%\s*endcomment\s*%}/),
+ hljs.COMMENT(/\{#/, /#}/),
+ {
+ className: 'template-tag',
+ begin: /\{%/, end: /%}/,
+ contains: [
+ {
+ className: 'name',
+ begin: /\w+/,
+ keywords: {
+ name:
+ 'comment endcomment load templatetag ifchanged endifchanged if endif firstof for ' +
+ 'endfor ifnotequal endifnotequal widthratio extends include spaceless ' +
+ 'endspaceless regroup ifequal endifequal ssi now with cycle url filter ' +
+ 'endfilter debug block endblock else autoescape endautoescape csrf_token empty elif ' +
+ 'endwith static trans blocktrans endblocktrans get_static_prefix get_media_prefix ' +
+ 'plural get_current_language language get_available_languages ' +
+ 'get_current_language_bidi get_language_info get_language_info_list localize ' +
+ 'endlocalize localtime endlocaltime timezone endtimezone get_current_timezone ' +
+ 'verbatim'
+ },
+ starts: {
+ endsWithParent: true,
+ keywords: 'in by as',
+ contains: [FILTER],
+ relevance: 0
+ }
+ }
+ ]
+ },
+ {
+ className: 'template-variable',
+ begin: /\{\{/, end: /}}/,
+ contains: [FILTER]
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("dns",
+/*
+Language: DNS Zone file
+Author: Tim Schumacher <tim@datenknoten.me>
+Category: config
+*/
+
+function(hljs) {
+ return {
+ aliases: ['bind', 'zone'],
+ keywords: {
+ keyword:
+ 'IN A AAAA AFSDB APL CAA CDNSKEY CDS CERT CNAME DHCID DLV DNAME DNSKEY DS HIP IPSECKEY KEY KX ' +
+ 'LOC MX NAPTR NS NSEC NSEC3 NSEC3PARAM PTR RRSIG RP SIG SOA SRV SSHFP TA TKEY TLSA TSIG TXT'
+ },
+ contains: [
+ hljs.COMMENT(';', '$', {relevance: 0}),
+ {
+ className: 'meta',
+ begin: /^\$(TTL|GENERATE|INCLUDE|ORIGIN)\b/
+ },
+ // IPv6
+ {
+ className: 'number',
+ begin: '((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))\\b'
+ },
+ // IPv4
+ {
+ className: 'number',
+ begin: '((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\b'
+ },
+ hljs.inherit(hljs.NUMBER_MODE, {begin: /\b\d+[dhwm]?/})
+ ]
+ };
+});
+
+hljs.registerLanguage("dockerfile",
+/*
+Language: Dockerfile
+Requires: bash.js
+Author: Alexis Hénaut <alexis@henaut.net>
+Description: language definition for Dockerfile files
+Category: config
+*/
+
+function(hljs) {
+ return {
+ aliases: ['docker'],
+ case_insensitive: true,
+ keywords: 'from maintainer cmd expose add copy entrypoint volume user workdir onbuild run env label',
+ contains: [
+ hljs.HASH_COMMENT_MODE,
+ {
+ keywords: 'run cmd entrypoint volume add copy workdir onbuild label',
+ begin: /^ *(onbuild +)?(run|cmd|entrypoint|volume|add|copy|workdir|label) +/,
+ starts: {
+ end: /[^\\]\n/,
+ subLanguage: 'bash'
+ }
+ },
+ {
+ keywords: 'from maintainer expose env user onbuild',
+ begin: /^ *(onbuild +)?(from|maintainer|expose|env|user|onbuild) +/, end: /[^\\]\n/,
+ contains: [
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.NUMBER_MODE,
+ hljs.HASH_COMMENT_MODE
+ ]
+ }
+ ]
+ }
+});
+
+hljs.registerLanguage("dos",
+/*
+Language: DOS .bat
+Author: Alexander Makarov <sam@rmcreative.ru>
+Contributors: Anton Kochkov <anton.kochkov@gmail.com>
+*/
+
+function(hljs) {
+ var COMMENT = hljs.COMMENT(
+ /^\s*@?rem\b/, /$/,
+ {
+ relevance: 10
+ }
+ );
+ var LABEL = {
+ className: 'symbol',
+ begin: '^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)',
+ relevance: 0
+ };
+ return {
+ aliases: ['bat', 'cmd'],
+ case_insensitive: true,
+ illegal: /\/\*/,
+ keywords: {
+ keyword:
+ 'if else goto for in do call exit not exist errorlevel defined ' +
+ 'equ neq lss leq gtr geq',
+ built_in:
+ 'prn nul lpt3 lpt2 lpt1 con com4 com3 com2 com1 aux ' +
+ 'shift cd dir echo setlocal endlocal set pause copy ' +
+ 'append assoc at attrib break cacls cd chcp chdir chkdsk chkntfs cls cmd color ' +
+ 'comp compact convert date dir diskcomp diskcopy doskey erase fs ' +
+ 'find findstr format ftype graftabl help keyb label md mkdir mode more move path ' +
+ 'pause print popd pushd promt rd recover rem rename replace restore rmdir shift' +
+ 'sort start subst time title tree type ver verify vol ' +
+ // winutils
+ 'ping net ipconfig taskkill xcopy ren del'
+ },
+ contains: [
+ {
+ className: 'variable', begin: /%%[^ ]|%[^ ]+?%|![^ ]+?!/
+ },
+ {
+ className: 'function',
+ begin: LABEL.begin, end: 'goto:eof',
+ contains: [
+ hljs.inherit(hljs.TITLE_MODE, {begin: '([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*'}),
+ COMMENT
+ ]
+ },
+ {
+ className: 'number', begin: '\\b\\d+',
+ relevance: 0
+ },
+ COMMENT
+ ]
+ };
+});
+
+hljs.registerLanguage("dsconfig",
+/*
+ Language: dsconfig
+ Description: dsconfig batch configuration language for LDAP directory servers
+ Contributors: Jacob Childress <jacobc@gmail.com>
+ Category: enterprise, config
+ */
+function(hljs) {
+ var QUOTED_PROPERTY = {
+ className: 'string',
+ begin: /"/, end: /"/
+ };
+ var APOS_PROPERTY = {
+ className: 'string',
+ begin: /'/, end: /'/
+ };
+ var UNQUOTED_PROPERTY = {
+ className: 'string',
+ begin: '[\\w-?]+:\\w+', end: '\\W',
+ relevance: 0
+ };
+ var VALUELESS_PROPERTY = {
+ className: 'string',
+ begin: '\\w+-?\\w+', end: '\\W',
+ relevance: 0
+ };
+
+ return {
+ keywords: 'dsconfig',
+ contains: [
+ {
+ className: 'keyword',
+ begin: '^dsconfig', end: '\\s', excludeEnd: true,
+ relevance: 10
+ },
+ {
+ className: 'built_in',
+ begin: '(list|create|get|set|delete)-(\\w+)', end: '\\s', excludeEnd: true,
+ illegal: '!@#$%^&*()',
+ relevance: 10
+ },
+ {
+ className: 'built_in',
+ begin: '--(\\w+)', end: '\\s', excludeEnd: true
+ },
+ QUOTED_PROPERTY,
+ APOS_PROPERTY,
+ UNQUOTED_PROPERTY,
+ VALUELESS_PROPERTY,
+ hljs.HASH_COMMENT_MODE
+ ]
+ };
+});
+
+hljs.registerLanguage("dts",
+/*
+Language: Device Tree
+Description: *.dts files used in the Linux kernel
+Author: Martin Braun <martin.braun@ettus.com>, Moritz Fischer <moritz.fischer@ettus.com>
+Category: config
+*/
+
+function(hljs) {
+ var STRINGS = {
+ className: 'string',
+ variants: [
+ hljs.inherit(hljs.QUOTE_STRING_MODE, { begin: '((u8?|U)|L)?"' }),
+ {
+ begin: '(u8?|U)?R"', end: '"',
+ contains: [hljs.BACKSLASH_ESCAPE]
+ },
+ {
+ begin: '\'\\\\?.', end: '\'',
+ illegal: '.'
+ }
+ ]
+ };
+
+ var NUMBERS = {
+ className: 'number',
+ variants: [
+ { begin: '\\b(\\d+(\\.\\d*)?|\\.\\d+)(u|U|l|L|ul|UL|f|F)' },
+ { begin: hljs.C_NUMBER_RE }
+ ],
+ relevance: 0
+ };
+
+ var PREPROCESSOR = {
+ className: 'meta',
+ begin: '#', end: '$',
+ keywords: {'meta-keyword': 'if else elif endif define undef ifdef ifndef'},
+ contains: [
+ {
+ begin: /\\\n/, relevance: 0
+ },
+ {
+ beginKeywords: 'include', end: '$',
+ keywords: {'meta-keyword': 'include'},
+ contains: [
+ hljs.inherit(STRINGS, {className: 'meta-string'}),
+ {
+ className: 'meta-string',
+ begin: '<', end: '>',
+ illegal: '\\n'
+ }
+ ]
+ },
+ STRINGS,
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE
+ ]
+ };
+
+ var DTS_REFERENCE = {
+ className: 'variable',
+ begin: '\\&[a-z\\d_]*\\b'
+ };
+
+ var DTS_KEYWORD = {
+ className: 'meta-keyword',
+ begin: '/[a-z][a-z\\d-]*/'
+ };
+
+ var DTS_LABEL = {
+ className: 'symbol',
+ begin: '^\\s*[a-zA-Z_][a-zA-Z\\d_]*:'
+ };
+
+ var DTS_CELL_PROPERTY = {
+ className: 'params',
+ begin: '<',
+ end: '>',
+ contains: [
+ NUMBERS,
+ DTS_REFERENCE
+ ]
+ };
+
+ var DTS_NODE = {
+ className: 'class',
+ begin: /[a-zA-Z_][a-zA-Z\d_@]*\s{/,
+ end: /[{;=]/,
+ returnBegin: true,
+ excludeEnd: true
+ };
+
+ var DTS_ROOT_NODE = {
+ className: 'class',
+ begin: '/\\s*{',
+ end: '};',
+ relevance: 10,
+ contains: [
+ DTS_REFERENCE,
+ DTS_KEYWORD,
+ DTS_LABEL,
+ DTS_NODE,
+ DTS_CELL_PROPERTY,
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ NUMBERS,
+ STRINGS
+ ]
+ };
+
+ return {
+ keywords: "",
+ contains: [
+ DTS_ROOT_NODE,
+ DTS_REFERENCE,
+ DTS_KEYWORD,
+ DTS_LABEL,
+ DTS_NODE,
+ DTS_CELL_PROPERTY,
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ NUMBERS,
+ STRINGS,
+ PREPROCESSOR,
+ {
+ begin: hljs.IDENT_RE + '::',
+ keywords: ""
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("dust",
+/*
+Language: Dust
+Requires: xml.js
+Author: Michael Allen <michael.allen@benefitfocus.com>
+Description: Matcher for dust.js templates.
+Category: template
+*/
+
+function(hljs) {
+ var EXPRESSION_KEYWORDS = 'if eq ne lt lte gt gte select default math sep';
+ return {
+ aliases: ['dst'],
+ case_insensitive: true,
+ subLanguage: 'xml',
+ contains: [
+ {
+ className: 'template-tag',
+ begin: /\{[#\/]/, end: /\}/, illegal: /;/,
+ contains: [
+ {
+ className: 'name',
+ begin: /[a-zA-Z\.-]+/,
+ starts: {
+ endsWithParent: true, relevance: 0,
+ contains: [
+ hljs.QUOTE_STRING_MODE
+ ]
+ }
+ }
+ ]
+ },
+ {
+ className: 'template-variable',
+ begin: /\{/, end: /\}/, illegal: /;/,
+ keywords: EXPRESSION_KEYWORDS
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("elixir",
+/*
+Language: Elixir
+Author: Josh Adams <josh@isotope11.com>
+Description: language definition for Elixir source code files (.ex and .exs). Based on ruby language support.
+Category: functional
+*/
+
+function(hljs) {
+ var ELIXIR_IDENT_RE = '[a-zA-Z_][a-zA-Z0-9_]*(\\!|\\?)?';
+ var ELIXIR_METHOD_RE = '[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?';
+ var ELIXIR_KEYWORDS =
+ 'and false then defined module in return redo retry end for true self when ' +
+ 'next until do begin unless nil break not case cond alias while ensure or ' +
+ 'include use alias fn quote';
+ var SUBST = {
+ className: 'subst',
+ begin: '#\\{', end: '}',
+ lexemes: ELIXIR_IDENT_RE,
+ keywords: ELIXIR_KEYWORDS
+ };
+ var STRING = {
+ className: 'string',
+ contains: [hljs.BACKSLASH_ESCAPE, SUBST],
+ variants: [
+ {
+ begin: /'/, end: /'/
+ },
+ {
+ begin: /"/, end: /"/
+ }
+ ]
+ };
+ var FUNCTION = {
+ className: 'function',
+ beginKeywords: 'def defp defmacro', end: /\B\b/, // the mode is ended by the title
+ contains: [
+ hljs.inherit(hljs.TITLE_MODE, {
+ begin: ELIXIR_IDENT_RE,
+ endsParent: true
+ })
+ ]
+ };
+ var CLASS = hljs.inherit(FUNCTION, {
+ className: 'class',
+ beginKeywords: 'defimpl defmodule defprotocol defrecord', end: /\bdo\b|$|;/
+ });
+ var ELIXIR_DEFAULT_CONTAINS = [
+ STRING,
+ hljs.HASH_COMMENT_MODE,
+ CLASS,
+ FUNCTION,
+ {
+ className: 'symbol',
+ begin: ':(?!\\s)',
+ contains: [STRING, {begin: ELIXIR_METHOD_RE}],
+ relevance: 0
+ },
+ {
+ className: 'symbol',
+ begin: ELIXIR_IDENT_RE + ':',
+ relevance: 0
+ },
+ {
+ className: 'number',
+ begin: '(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b',
+ relevance: 0
+ },
+ {
+ className: 'variable',
+ begin: '(\\$\\W)|((\\$|\\@\\@?)(\\w+))'
+ },
+ {
+ begin: '->'
+ },
+ { // regexp container
+ begin: '(' + hljs.RE_STARTERS_RE + ')\\s*',
+ contains: [
+ hljs.HASH_COMMENT_MODE,
+ {
+ className: 'regexp',
+ illegal: '\\n',
+ contains: [hljs.BACKSLASH_ESCAPE, SUBST],
+ variants: [
+ {
+ begin: '/', end: '/[a-z]*'
+ },
+ {
+ begin: '%r\\[', end: '\\][a-z]*'
+ }
+ ]
+ }
+ ],
+ relevance: 0
+ }
+ ];
+ SUBST.contains = ELIXIR_DEFAULT_CONTAINS;
+
+ return {
+ lexemes: ELIXIR_IDENT_RE,
+ keywords: ELIXIR_KEYWORDS,
+ contains: ELIXIR_DEFAULT_CONTAINS
+ };
+});
+
+hljs.registerLanguage("elm",
+/*
+Language: Elm
+Author: Janis Voigtlaender <janis.voigtlaender@gmail.com>
+Category: functional
+*/
+
+function(hljs) {
+ var COMMENT = {
+ variants: [
+ hljs.COMMENT('--', '$'),
+ hljs.COMMENT(
+ '{-',
+ '-}',
+ {
+ contains: ['self']
+ }
+ )
+ ]
+ };
+
+ var CONSTRUCTOR = {
+ className: 'type',
+ begin: '\\b[A-Z][\\w\']*', // TODO: other constructors (built-in, infix).
+ relevance: 0
+ };
+
+ var LIST = {
+ begin: '\\(', end: '\\)',
+ illegal: '"',
+ contains: [
+ {className: 'type', begin: '\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?'},
+ COMMENT
+ ]
+ };
+
+ var RECORD = {
+ begin: '{', end: '}',
+ contains: LIST.contains
+ };
+
+ return {
+ keywords:
+ 'let in if then else case of where module import exposing ' +
+ 'type alias as infix infixl infixr port effect command',
+ contains: [
+
+ // Top-level constructions.
+
+ {
+ beginKeywords: 'port effect module', end: 'exposing',
+ keywords: 'port effect module where command exposing',
+ contains: [LIST, COMMENT],
+ illegal: '\\W\\.|;'
+ },
+ {
+ begin: 'import', end: '$',
+ keywords: 'import as exposing',
+ contains: [LIST, COMMENT],
+ illegal: '\\W\\.|;'
+ },
+ {
+ begin: 'type', end: '$',
+ keywords: 'type alias',
+ contains: [CONSTRUCTOR, LIST, RECORD, COMMENT]
+ },
+ {
+ beginKeywords: 'infix infixl infixr', end: '$',
+ contains: [hljs.C_NUMBER_MODE, COMMENT]
+ },
+ {
+ begin: 'port', end: '$',
+ keywords: 'port',
+ contains: [COMMENT]
+ },
+
+ // Literals and names.
+
+ // TODO: characters.
+ hljs.QUOTE_STRING_MODE,
+ hljs.C_NUMBER_MODE,
+ CONSTRUCTOR,
+ hljs.inherit(hljs.TITLE_MODE, {begin: '^[_a-z][\\w\']*'}),
+ COMMENT,
+
+ {begin: '->|<-'} // No markup, relevance booster
+ ]
+ };
+});
+
+hljs.registerLanguage("ruby",
+/*
+Language: Ruby
+Author: Anton Kovalyov <anton@kovalyov.net>
+Contributors: Peter Leonov <gojpeg@yandex.ru>, Vasily Polovnyov <vast@whiteants.net>, Loren Segal <lsegal@soen.ca>, Pascal Hurni <phi@ruby-reactive.org>, Cedric Sohrauer <sohrauer@googlemail.com>
+Category: common
+*/
+
+function(hljs) {
+ var RUBY_METHOD_RE = '[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?';
+ var RUBY_KEYWORDS = {
+ keyword:
+ 'and then defined module in return redo if BEGIN retry end for self when ' +
+ 'next until do begin unless END rescue else break undef not super class case ' +
+ 'require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor',
+ literal:
+ 'true false nil'
+ };
+ var YARDOCTAG = {
+ className: 'doctag',
+ begin: '@[A-Za-z]+'
+ };
+ var IRB_OBJECT = {
+ begin: '#<', end: '>'
+ };
+ var COMMENT_MODES = [
+ hljs.COMMENT(
+ '#',
+ '$',
+ {
+ contains: [YARDOCTAG]
+ }
+ ),
+ hljs.COMMENT(
+ '^\\=begin',
+ '^\\=end',
+ {
+ contains: [YARDOCTAG],
+ relevance: 10
+ }
+ ),
+ hljs.COMMENT('^__END__', '\\n$')
+ ];
+ var SUBST = {
+ className: 'subst',
+ begin: '#\\{', end: '}',
+ keywords: RUBY_KEYWORDS
+ };
+ var STRING = {
+ className: 'string',
+ contains: [hljs.BACKSLASH_ESCAPE, SUBST],
+ variants: [
+ {begin: /'/, end: /'/},
+ {begin: /"/, end: /"/},
+ {begin: /`/, end: /`/},
+ {begin: '%[qQwWx]?\\(', end: '\\)'},
+ {begin: '%[qQwWx]?\\[', end: '\\]'},
+ {begin: '%[qQwWx]?{', end: '}'},
+ {begin: '%[qQwWx]?<', end: '>'},
+ {begin: '%[qQwWx]?/', end: '/'},
+ {begin: '%[qQwWx]?%', end: '%'},
+ {begin: '%[qQwWx]?-', end: '-'},
+ {begin: '%[qQwWx]?\\|', end: '\\|'},
+ {
+ // \B in the beginning suppresses recognition of ?-sequences where ?
+ // is the last character of a preceding identifier, as in: `func?4`
+ begin: /\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/
+ }
+ ]
+ };
+ var PARAMS = {
+ className: 'params',
+ begin: '\\(', end: '\\)', endsParent: true,
+ keywords: RUBY_KEYWORDS
+ };
+
+ var RUBY_DEFAULT_CONTAINS = [
+ STRING,
+ IRB_OBJECT,
+ {
+ className: 'class',
+ beginKeywords: 'class module', end: '$|;',
+ illegal: /=/,
+ contains: [
+ hljs.inherit(hljs.TITLE_MODE, {begin: '[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?'}),
+ {
+ begin: '<\\s*',
+ contains: [{
+ begin: '(' + hljs.IDENT_RE + '::)?' + hljs.IDENT_RE
+ }]
+ }
+ ].concat(COMMENT_MODES)
+ },
+ {
+ className: 'function',
+ beginKeywords: 'def', end: '$|;',
+ contains: [
+ hljs.inherit(hljs.TITLE_MODE, {begin: RUBY_METHOD_RE}),
+ PARAMS
+ ].concat(COMMENT_MODES)
+ },
+ {
+ // swallow namespace qualifiers before symbols
+ begin: hljs.IDENT_RE + '::'
+ },
+ {
+ className: 'symbol',
+ begin: hljs.UNDERSCORE_IDENT_RE + '(\\!|\\?)?:',
+ relevance: 0
+ },
+ {
+ className: 'symbol',
+ begin: ':(?!\\s)',
+ contains: [STRING, {begin: RUBY_METHOD_RE}],
+ relevance: 0
+ },
+ {
+ className: 'number',
+ begin: '(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b',
+ relevance: 0
+ },
+ {
+ begin: '(\\$\\W)|((\\$|\\@\\@?)(\\w+))' // variables
+ },
+ {
+ className: 'params',
+ begin: /\|/, end: /\|/,
+ keywords: RUBY_KEYWORDS
+ },
+ { // regexp container
+ begin: '(' + hljs.RE_STARTERS_RE + ')\\s*',
+ contains: [
+ IRB_OBJECT,
+ {
+ className: 'regexp',
+ contains: [hljs.BACKSLASH_ESCAPE, SUBST],
+ illegal: /\n/,
+ variants: [
+ {begin: '/', end: '/[a-z]*'},
+ {begin: '%r{', end: '}[a-z]*'},
+ {begin: '%r\\(', end: '\\)[a-z]*'},
+ {begin: '%r!', end: '![a-z]*'},
+ {begin: '%r\\[', end: '\\][a-z]*'}
+ ]
+ }
+ ].concat(COMMENT_MODES),
+ relevance: 0
+ }
+ ].concat(COMMENT_MODES);
+
+ SUBST.contains = RUBY_DEFAULT_CONTAINS;
+ PARAMS.contains = RUBY_DEFAULT_CONTAINS;
+
+ var SIMPLE_PROMPT = "[>?]>";
+ var DEFAULT_PROMPT = "[\\w#]+\\(\\w+\\):\\d+:\\d+>";
+ var RVM_PROMPT = "(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>";
+
+ var IRB_DEFAULT = [
+ {
+ begin: /^\s*=>/,
+ starts: {
+ end: '$', contains: RUBY_DEFAULT_CONTAINS
+ }
+ },
+ {
+ className: 'meta',
+ begin: '^('+SIMPLE_PROMPT+"|"+DEFAULT_PROMPT+'|'+RVM_PROMPT+')',
+ starts: {
+ end: '$', contains: RUBY_DEFAULT_CONTAINS
+ }
+ }
+ ];
+
+ return {
+ aliases: ['rb', 'gemspec', 'podspec', 'thor', 'irb'],
+ keywords: RUBY_KEYWORDS,
+ illegal: /\/\*/,
+ contains: COMMENT_MODES.concat(IRB_DEFAULT).concat(RUBY_DEFAULT_CONTAINS)
+ };
+});
+
+hljs.registerLanguage("erb",
+/*
+Language: ERB (Embedded Ruby)
+Requires: xml.js, ruby.js
+Author: Lucas Mazza <lucastmazza@gmail.com>
+Contributors: Kassio Borges <kassioborgesm@gmail.com>
+Description: "Bridge" language defining fragments of Ruby in HTML within <% .. %>
+Category: template
+*/
+
+function(hljs) {
+ return {
+ subLanguage: 'xml',
+ contains: [
+ hljs.COMMENT('<%#', '%>'),
+ {
+ begin: '<%[%=-]?', end: '[%-]?%>',
+ subLanguage: 'ruby',
+ excludeBegin: true,
+ excludeEnd: true
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("erlang-repl",
+/*
+ Language: Erlang REPL
+ Author: Sergey Ignatov <sergey@ignatov.spb.su>
+Category: functional
+ */
+
+function(hljs) {
+ return {
+ keywords: {
+ built_in:
+ 'spawn spawn_link self',
+ keyword:
+ 'after and andalso|10 band begin bnot bor bsl bsr bxor case catch cond div end fun if ' +
+ 'let not of or orelse|10 query receive rem try when xor'
+ },
+ contains: [
+ {
+ className: 'meta', begin: '^[0-9]+> ',
+ relevance: 10
+ },
+ hljs.COMMENT('%', '$'),
+ {
+ className: 'number',
+ begin: '\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)',
+ relevance: 0
+ },
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ {
+ begin: '\\?(::)?([A-Z]\\w*(::)?)+'
+ },
+ {
+ begin: '->'
+ },
+ {
+ begin: 'ok'
+ },
+ {
+ begin: '!'
+ },
+ {
+ begin: '(\\b[a-z\'][a-zA-Z0-9_\']*:[a-z\'][a-zA-Z0-9_\']*)|(\\b[a-z\'][a-zA-Z0-9_\']*)',
+ relevance: 0
+ },
+ {
+ begin: '[A-Z][a-zA-Z0-9_\']*',
+ relevance: 0
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("erlang",
+/*
+Language: Erlang
+Description: Erlang is a general-purpose functional language, with strict evaluation, single assignment, and dynamic typing.
+Author: Nikolay Zakharov <nikolay.desh@gmail.com>, Dmitry Kovega <arhibot@gmail.com>
+Category: functional
+*/
+
+function(hljs) {
+ var BASIC_ATOM_RE = '[a-z\'][a-zA-Z0-9_\']*';
+ var FUNCTION_NAME_RE = '(' + BASIC_ATOM_RE + ':' + BASIC_ATOM_RE + '|' + BASIC_ATOM_RE + ')';
+ var ERLANG_RESERVED = {
+ keyword:
+ 'after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if ' +
+ 'let not of orelse|10 query receive rem try when xor',
+ literal:
+ 'false true'
+ };
+
+ var COMMENT = hljs.COMMENT('%', '$');
+ var NUMBER = {
+ className: 'number',
+ begin: '\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)',
+ relevance: 0
+ };
+ var NAMED_FUN = {
+ begin: 'fun\\s+' + BASIC_ATOM_RE + '/\\d+'
+ };
+ var FUNCTION_CALL = {
+ begin: FUNCTION_NAME_RE + '\\(', end: '\\)',
+ returnBegin: true,
+ relevance: 0,
+ contains: [
+ {
+ begin: FUNCTION_NAME_RE, relevance: 0
+ },
+ {
+ begin: '\\(', end: '\\)', endsWithParent: true,
+ returnEnd: true,
+ relevance: 0
+ // "contains" defined later
+ }
+ ]
+ };
+ var TUPLE = {
+ begin: '{', end: '}',
+ relevance: 0
+ // "contains" defined later
+ };
+ var VAR1 = {
+ begin: '\\b_([A-Z][A-Za-z0-9_]*)?',
+ relevance: 0
+ };
+ var VAR2 = {
+ begin: '[A-Z][a-zA-Z0-9_]*',
+ relevance: 0
+ };
+ var RECORD_ACCESS = {
+ begin: '#' + hljs.UNDERSCORE_IDENT_RE,
+ relevance: 0,
+ returnBegin: true,
+ contains: [
+ {
+ begin: '#' + hljs.UNDERSCORE_IDENT_RE,
+ relevance: 0
+ },
+ {
+ begin: '{', end: '}',
+ relevance: 0
+ // "contains" defined later
+ }
+ ]
+ };
+
+ var BLOCK_STATEMENTS = {
+ beginKeywords: 'fun receive if try case', end: 'end',
+ keywords: ERLANG_RESERVED
+ };
+ BLOCK_STATEMENTS.contains = [
+ COMMENT,
+ NAMED_FUN,
+ hljs.inherit(hljs.APOS_STRING_MODE, {className: ''}),
+ BLOCK_STATEMENTS,
+ FUNCTION_CALL,
+ hljs.QUOTE_STRING_MODE,
+ NUMBER,
+ TUPLE,
+ VAR1, VAR2,
+ RECORD_ACCESS
+ ];
+
+ var BASIC_MODES = [
+ COMMENT,
+ NAMED_FUN,
+ BLOCK_STATEMENTS,
+ FUNCTION_CALL,
+ hljs.QUOTE_STRING_MODE,
+ NUMBER,
+ TUPLE,
+ VAR1, VAR2,
+ RECORD_ACCESS
+ ];
+ FUNCTION_CALL.contains[1].contains = BASIC_MODES;
+ TUPLE.contains = BASIC_MODES;
+ RECORD_ACCESS.contains[1].contains = BASIC_MODES;
+
+ var PARAMS = {
+ className: 'params',
+ begin: '\\(', end: '\\)',
+ contains: BASIC_MODES
+ };
+ return {
+ aliases: ['erl'],
+ keywords: ERLANG_RESERVED,
+ illegal: '(</|\\*=|\\+=|-=|/\\*|\\*/|\\(\\*|\\*\\))',
+ contains: [
+ {
+ className: 'function',
+ begin: '^' + BASIC_ATOM_RE + '\\s*\\(', end: '->',
+ returnBegin: true,
+ illegal: '\\(|#|//|/\\*|\\\\|:|;',
+ contains: [
+ PARAMS,
+ hljs.inherit(hljs.TITLE_MODE, {begin: BASIC_ATOM_RE})
+ ],
+ starts: {
+ end: ';|\\.',
+ keywords: ERLANG_RESERVED,
+ contains: BASIC_MODES
+ }
+ },
+ COMMENT,
+ {
+ begin: '^-', end: '\\.',
+ relevance: 0,
+ excludeEnd: true,
+ returnBegin: true,
+ lexemes: '-' + hljs.IDENT_RE,
+ keywords:
+ '-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn ' +
+ '-import -include -include_lib -compile -define -else -endif -file -behaviour ' +
+ '-behavior -spec',
+ contains: [PARAMS]
+ },
+ NUMBER,
+ hljs.QUOTE_STRING_MODE,
+ RECORD_ACCESS,
+ VAR1, VAR2,
+ TUPLE,
+ {begin: /\.$/} // relevance booster
+ ]
+ };
+});
+
+hljs.registerLanguage("excel",
+/*
+Language: Excel
+Author: Victor Zhou <OiCMudkips@users.noreply.github.com>
+Description: Excel formulae
+*/
+
+function(hljs) {
+ return {
+ aliases: ['xlsx', 'xls'],
+ case_insensitive: true,
+ lexemes: /[a-zA-Z][\w\.]*/,
+ // built-in functions imported from https://web.archive.org/web/20160513042710/https://support.office.com/en-us/article/Excel-functions-alphabetical-b3944572-255d-4efb-bb96-c6d90033e188
+ keywords: {
+ built_in: 'ABS ACCRINT ACCRINTM ACOS ACOSH ACOT ACOTH AGGREGATE ADDRESS AMORDEGRC AMORLINC AND ARABIC AREAS ASC ASIN ASINH ATAN ATAN2 ATANH AVEDEV AVERAGE AVERAGEA AVERAGEIF AVERAGEIFS BAHTTEXT BASE BESSELI BESSELJ BESSELK BESSELY BETADIST BETA.DIST BETAINV BETA.INV BIN2DEC BIN2HEX BIN2OCT BINOMDIST BINOM.DIST BINOM.DIST.RANGE BINOM.INV BITAND BITLSHIFT BITOR BITRSHIFT BITXOR CALL CEILING CEILING.MATH CEILING.PRECISE CELL CHAR CHIDIST CHIINV CHITEST CHISQ.DIST CHISQ.DIST.RT CHISQ.INV CHISQ.INV.RT CHISQ.TEST CHOOSE CLEAN CODE COLUMN COLUMNS COMBIN COMBINA COMPLEX CONCAT CONCATENATE CONFIDENCE CONFIDENCE.NORM CONFIDENCE.T CONVERT CORREL COS COSH COT COTH COUNT COUNTA COUNTBLANK COUNTIF COUNTIFS COUPDAYBS COUPDAYS COUPDAYSNC COUPNCD COUPNUM COUPPCD COVAR COVARIANCE.P COVARIANCE.S CRITBINOM CSC CSCH CUBEKPIMEMBER CUBEMEMBER CUBEMEMBERPROPERTY CUBERANKEDMEMBER CUBESET CUBESETCOUNT CUBEVALUE CUMIPMT CUMPRINC DATE DATEDIF DATEVALUE DAVERAGE DAY DAYS DAYS360 DB DBCS DCOUNT DCOUNTA DDB DEC2BIN DEC2HEX DEC2OCT DECIMAL DEGREES DELTA DEVSQ DGET DISC DMAX DMIN DOLLAR DOLLARDE DOLLARFR DPRODUCT DSTDEV DSTDEVP DSUM DURATION DVAR DVARP EDATE EFFECT ENCODEURL EOMONTH ERF ERF.PRECISE ERFC ERFC.PRECISE ERROR.TYPE EUROCONVERT EVEN EXACT EXP EXPON.DIST EXPONDIST FACT FACTDOUBLE FALSE|0 F.DIST FDIST F.DIST.RT FILTERXML FIND FINDB F.INV F.INV.RT FINV FISHER FISHERINV FIXED FLOOR FLOOR.MATH FLOOR.PRECISE FORECAST FORECAST.ETS FORECAST.ETS.CONFINT FORECAST.ETS.SEASONALITY FORECAST.ETS.STAT FORECAST.LINEAR FORMULATEXT FREQUENCY F.TEST FTEST FV FVSCHEDULE GAMMA GAMMA.DIST GAMMADIST GAMMA.INV GAMMAINV GAMMALN GAMMALN.PRECISE GAUSS GCD GEOMEAN GESTEP GETPIVOTDATA GROWTH HARMEAN HEX2BIN HEX2DEC HEX2OCT HLOOKUP HOUR HYPERLINK HYPGEOM.DIST HYPGEOMDIST IF|0 IFERROR IFNA IFS IMABS IMAGINARY IMARGUMENT IMCONJUGATE IMCOS IMCOSH IMCOT IMCSC IMCSCH IMDIV IMEXP IMLN IMLOG10 IMLOG2 IMPOWER IMPRODUCT IMREAL IMSEC IMSECH IMSIN IMSINH IMSQRT IMSUB IMSUM IMTAN INDEX INDIRECT INFO INT INTERCEPT INTRATE IPMT IRR ISBLANK ISERR ISERROR ISEVEN ISFORMULA ISLOGICAL ISNA ISNONTEXT ISNUMBER ISODD ISREF ISTEXT ISO.CEILING ISOWEEKNUM ISPMT JIS KURT LARGE LCM LEFT LEFTB LEN LENB LINEST LN LOG LOG10 LOGEST LOGINV LOGNORM.DIST LOGNORMDIST LOGNORM.INV LOOKUP LOWER MATCH MAX MAXA MAXIFS MDETERM MDURATION MEDIAN MID MIDBs MIN MINIFS MINA MINUTE MINVERSE MIRR MMULT MOD MODE MODE.MULT MODE.SNGL MONTH MROUND MULTINOMIAL MUNIT N NA NEGBINOM.DIST NEGBINOMDIST NETWORKDAYS NETWORKDAYS.INTL NOMINAL NORM.DIST NORMDIST NORMINV NORM.INV NORM.S.DIST NORMSDIST NORM.S.INV NORMSINV NOT NOW NPER NPV NUMBERVALUE OCT2BIN OCT2DEC OCT2HEX ODD ODDFPRICE ODDFYIELD ODDLPRICE ODDLYIELD OFFSET OR PDURATION PEARSON PERCENTILE.EXC PERCENTILE.INC PERCENTILE PERCENTRANK.EXC PERCENTRANK.INC PERCENTRANK PERMUT PERMUTATIONA PHI PHONETIC PI PMT POISSON.DIST POISSON POWER PPMT PRICE PRICEDISC PRICEMAT PROB PRODUCT PROPER PV QUARTILE QUARTILE.EXC QUARTILE.INC QUOTIENT RADIANS RAND RANDBETWEEN RANK.AVG RANK.EQ RANK RATE RECEIVED REGISTER.ID REPLACE REPLACEB REPT RIGHT RIGHTB ROMAN ROUND ROUNDDOWN ROUNDUP ROW ROWS RRI RSQ RTD SEARCH SEARCHB SEC SECH SECOND SERIESSUM SHEET SHEETS SIGN SIN SINH SKEW SKEW.P SLN SLOPE SMALL SQL.REQUEST SQRT SQRTPI STANDARDIZE STDEV STDEV.P STDEV.S STDEVA STDEVP STDEVPA STEYX SUBSTITUTE SUBTOTAL SUM SUMIF SUMIFS SUMPRODUCT SUMSQ SUMX2MY2 SUMX2PY2 SUMXMY2 SWITCH SYD T TAN TANH TBILLEQ TBILLPRICE TBILLYIELD T.DIST T.DIST.2T T.DIST.RT TDIST TEXT TEXTJOIN TIME TIMEVALUE T.INV T.INV.2T TINV TODAY TRANSPOSE TREND TRIM TRIMMEAN TRUE|0 TRUNC T.TEST TTEST TYPE UNICHAR UNICODE UPPER VALUE VAR VAR.P VAR.S VARA VARP VARPA VDB VLOOKUP WEBSERVICE WEEKDAY WEEKNUM WEIBULL WEIBULL.DIST WORKDAY WORKDAY.INTL XIRR XNPV XOR YEAR YEARFRAC YIELD YIELDDISC YIELDMAT Z.TEST ZTEST'
+ },
+ contains: [
+ {
+ /* matches a beginning equal sign found in Excel formula examples */
+ begin: /^=/,
+ end: /[^=]/, returnEnd: true, illegal: /=/, /* only allow single equal sign at front of line */
+ relevance: 10
+ },
+ /* technically, there can be more than 2 letters in column names, but this prevents conflict with some keywords */
+ {
+ /* matches a reference to a single cell */
+ className: 'symbol',
+ begin: /\b[A-Z]{1,2}\d+\b/,
+ end: /[^\d]/, excludeEnd: true,
+ relevance: 0
+ },
+ {
+ /* matches a reference to a range of cells */
+ className: 'symbol',
+ begin: /[A-Z]{0,2}\d*:[A-Z]{0,2}\d*/,
+ relevance: 0
+ },
+ hljs.BACKSLASH_ESCAPE,
+ hljs.QUOTE_STRING_MODE,
+ {
+ className: 'number',
+ begin: hljs.NUMBER_RE + '(%)?',
+ relevance: 0
+ },
+ /* Excel formula comments are done by putting the comment in a function call to N() */
+ hljs.COMMENT(/\bN\(/,/\)/,
+ {
+ excludeBegin: true,
+ excludeEnd: true,
+ illegal: /\n/
+ })
+ ]
+ };
+});
+
+hljs.registerLanguage("fix",
+/*
+Language: FIX
+Author: Brent Bradbury <brent@brentium.com>
+*/
+
+function(hljs) {
+ return {
+ contains: [
+ {
+ begin: /[^\u2401\u0001]+/,
+ end: /[\u2401\u0001]/,
+ excludeEnd: true,
+ returnBegin: true,
+ returnEnd: false,
+ contains: [
+ {
+ begin: /([^\u2401\u0001=]+)/,
+ end: /=([^\u2401\u0001=]+)/,
+ returnEnd: true,
+ returnBegin: false,
+ className: 'attr'
+ },
+ {
+ begin: /=/,
+ end: /([\u2401\u0001])/,
+ excludeEnd: true,
+ excludeBegin: true,
+ className: 'string'
+ }]
+ }],
+ case_insensitive: true
+ };
+});
+
+hljs.registerLanguage("fortran",
+/*
+Language: Fortran
+Author: Anthony Scemama <scemama@irsamc.ups-tlse.fr>
+Category: scientific
+*/
+
+function(hljs) {
+ var PARAMS = {
+ className: 'params',
+ begin: '\\(', end: '\\)'
+ };
+
+ var F_KEYWORDS = {
+ literal: '.False. .True.',
+ keyword: 'kind do while private call intrinsic where elsewhere ' +
+ 'type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then ' +
+ 'public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. ' +
+ 'goto save else use module select case ' +
+ 'access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit ' +
+ 'continue format pause cycle exit ' +
+ 'c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg ' +
+ 'synchronous nopass non_overridable pass protected volatile abstract extends import ' +
+ 'non_intrinsic value deferred generic final enumerator class associate bind enum ' +
+ 'c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t ' +
+ 'c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double ' +
+ 'c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr ' +
+ 'c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated c_f_pointer ' +
+ 'c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor ' +
+ 'numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ' +
+ 'ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive ' +
+ 'pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure ' +
+ 'integer real character complex logical dimension allocatable|10 parameter ' +
+ 'external implicit|10 none double precision assign intent optional pointer ' +
+ 'target in out common equivalence data',
+ built_in: 'alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint ' +
+ 'dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl ' +
+ 'algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama ' +
+ 'iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod ' +
+ 'qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log ' +
+ 'log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate ' +
+ 'adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product ' +
+ 'eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul ' +
+ 'maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product ' +
+ 'radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind ' +
+ 'set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer ' +
+ 'dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ' +
+ 'ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode ' +
+ 'is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_of' +
+ 'acosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 ' +
+ 'atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits ' +
+ 'bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr ' +
+ 'num_images parity popcnt poppar shifta shiftl shiftr this_image'
+ };
+ return {
+ case_insensitive: true,
+ aliases: ['f90', 'f95'],
+ keywords: F_KEYWORDS,
+ illegal: /\/\*/,
+ contains: [
+ hljs.inherit(hljs.APOS_STRING_MODE, {className: 'string', relevance: 0}),
+ hljs.inherit(hljs.QUOTE_STRING_MODE, {className: 'string', relevance: 0}),
+ {
+ className: 'function',
+ beginKeywords: 'subroutine function program',
+ illegal: '[${=\\n]',
+ contains: [hljs.UNDERSCORE_TITLE_MODE, PARAMS]
+ },
+ hljs.COMMENT('!', '$', {relevance: 0}),
+ {
+ className: 'number',
+ begin: '(?=\\b|\\+|\\-|\\.)(?=\\.\\d|\\d)(?:\\d+)?(?:\\.?\\d*)(?:[de][+-]?\\d+)?\\b\\.?',
+ relevance: 0
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("fsharp",
+/*
+Language: F#
+Author: Jonas Follesø <jonas@follesoe.no>
+Contributors: Troy Kershaw <hello@troykershaw.com>, Henrik Feldt <henrik@haf.se>
+Category: functional
+*/
+function(hljs) {
+ var TYPEPARAM = {
+ begin: '<', end: '>',
+ contains: [
+ hljs.inherit(hljs.TITLE_MODE, {begin: /'[a-zA-Z0-9_]+/})
+ ]
+ };
+
+ return {
+ aliases: ['fs'],
+ keywords:
+ 'abstract and as assert base begin class default delegate do done ' +
+ 'downcast downto elif else end exception extern false finally for ' +
+ 'fun function global if in inherit inline interface internal lazy let ' +
+ 'match member module mutable namespace new null of open or ' +
+ 'override private public rec return sig static struct then to ' +
+ 'true try type upcast use val void when while with yield',
+ illegal: /\/\*/,
+ contains: [
+ {
+ // monad builder keywords (matches before non-bang kws)
+ className: 'keyword',
+ begin: /\b(yield|return|let|do)!/
+ },
+ {
+ className: 'string',
+ begin: '@"', end: '"',
+ contains: [{begin: '""'}]
+ },
+ {
+ className: 'string',
+ begin: '"""', end: '"""'
+ },
+ hljs.COMMENT('\\(\\*', '\\*\\)'),
+ {
+ className: 'class',
+ beginKeywords: 'type', end: '\\(|=|$', excludeEnd: true,
+ contains: [
+ hljs.UNDERSCORE_TITLE_MODE,
+ TYPEPARAM
+ ]
+ },
+ {
+ className: 'meta',
+ begin: '\\[<', end: '>\\]',
+ relevance: 10
+ },
+ {
+ className: 'symbol',
+ begin: '\\B(\'[A-Za-z])\\b',
+ contains: [hljs.BACKSLASH_ESCAPE]
+ },
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null}),
+ hljs.C_NUMBER_MODE
+ ]
+ };
+});
+
+hljs.registerLanguage("gams",
+
+/*
+ Language: GAMS
+ Author: Stefan Bechert <stefan.bechert@gmx.net>
+ Contributors: Oleg Efimov <efimovov@gmail.com>, Mikko Kouhia <mikko.kouhia@iki.fi>
+ Description: The General Algebraic Modeling System language
+ Category: scientific
+ */
+
+function (hljs) {
+ var KEYWORDS = {
+ 'keyword':
+ 'abort acronym acronyms alias all and assign binary card diag display ' +
+ 'else eq file files for free ge gt if integer le loop lt maximizing ' +
+ 'minimizing model models ne negative no not option options or ord ' +
+ 'positive prod put putpage puttl repeat sameas semicont semiint smax ' +
+ 'smin solve sos1 sos2 sum system table then until using while xor yes',
+ 'literal': 'eps inf na',
+ 'built-in':
+ 'abs arccos arcsin arctan arctan2 Beta betaReg binomial ceil centropy ' +
+ 'cos cosh cvPower div div0 eDist entropy errorf execSeed exp fact ' +
+ 'floor frac gamma gammaReg log logBeta logGamma log10 log2 mapVal max ' +
+ 'min mod ncpCM ncpF ncpVUpow ncpVUsin normal pi poly power ' +
+ 'randBinomial randLinear randTriangle round rPower sigmoid sign ' +
+ 'signPower sin sinh slexp sllog10 slrec sqexp sqlog10 sqr sqrec sqrt ' +
+ 'tan tanh trunc uniform uniformInt vcPower bool_and bool_eqv bool_imp ' +
+ 'bool_not bool_or bool_xor ifThen rel_eq rel_ge rel_gt rel_le rel_lt ' +
+ 'rel_ne gday gdow ghour gleap gmillisec gminute gmonth gsecond gyear ' +
+ 'jdate jnow jstart jtime errorLevel execError gamsRelease gamsVersion ' +
+ 'handleCollect handleDelete handleStatus handleSubmit heapFree ' +
+ 'heapLimit heapSize jobHandle jobKill jobStatus jobTerminate ' +
+ 'licenseLevel licenseStatus maxExecError sleep timeClose timeComp ' +
+ 'timeElapsed timeExec timeStart'
+ };
+ var PARAMS = {
+ className: 'params',
+ begin: /\(/, end: /\)/,
+ excludeBegin: true,
+ excludeEnd: true,
+ };
+ var SYMBOLS = {
+ className: 'symbol',
+ variants: [
+ {begin: /\=[lgenxc]=/},
+ {begin: /\$/},
+ ]
+ };
+ var QSTR = { // One-line quoted comment string
+ className: 'comment',
+ variants: [
+ {begin: '\'', end: '\''},
+ {begin: '"', end: '"'},
+ ],
+ illegal: '\\n',
+ contains: [hljs.BACKSLASH_ESCAPE]
+ };
+ var ASSIGNMENT = {
+ begin: '/',
+ end: '/',
+ keywords: KEYWORDS,
+ contains: [
+ QSTR,
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.APOS_STRING_MODE,
+ hljs.C_NUMBER_MODE,
+ ],
+ };
+ var DESCTEXT = { // Parameter/set/variable description text
+ begin: /[a-z][a-z0-9_]*(\([a-z0-9_, ]*\))?[ \t]+/,
+ excludeBegin: true,
+ end: '$',
+ endsWithParent: true,
+ contains: [
+ QSTR,
+ ASSIGNMENT,
+ {
+ className: 'comment',
+ begin: /([ ]*[a-z0-9&#*=?@>\\<:\-,()$\[\]_.{}!+%^]+)+/,
+ relevance: 0
+ },
+ ],
+ };
+
+ return {
+ aliases: ['gms'],
+ case_insensitive: true,
+ keywords: KEYWORDS,
+ contains: [
+ hljs.COMMENT(/^\$ontext/, /^\$offtext/),
+ {
+ className: 'meta',
+ begin: '^\\$[a-z0-9]+',
+ end: '$',
+ returnBegin: true,
+ contains: [
+ {
+ className: 'meta-keyword',
+ begin: '^\\$[a-z0-9]+',
+ }
+ ]
+ },
+ hljs.COMMENT('^\\*', '$'),
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.APOS_STRING_MODE,
+ // Declarations
+ {
+ beginKeywords:
+ 'set sets parameter parameters variable variables ' +
+ 'scalar scalars equation equations',
+ end: ';',
+ contains: [
+ hljs.COMMENT('^\\*', '$'),
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.APOS_STRING_MODE,
+ ASSIGNMENT,
+ DESCTEXT,
+ ]
+ },
+ { // table environment
+ beginKeywords: 'table',
+ end: ';',
+ returnBegin: true,
+ contains: [
+ { // table header row
+ beginKeywords: 'table',
+ end: '$',
+ contains: [DESCTEXT],
+ },
+ hljs.COMMENT('^\\*', '$'),
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.APOS_STRING_MODE,
+ hljs.C_NUMBER_MODE,
+ // Table does not contain DESCTEXT or ASSIGNMENT
+ ]
+ },
+ // Function definitions
+ {
+ className: 'function',
+ begin: /^[a-z][a-z0-9_,\-+' ()$]+\.{2}/,
+ returnBegin: true,
+ contains: [
+ { // Function title
+ className: 'title',
+ begin: /^[a-z][a-z0-9_]+/,
+ },
+ PARAMS,
+ SYMBOLS,
+ ],
+ },
+ hljs.C_NUMBER_MODE,
+ SYMBOLS,
+ ]
+ };
+});
+
+hljs.registerLanguage("gauss",
+/*
+Language: GAUSS
+Author: Matt Evans <matt@aptech.com>
+Category: scientific
+Description: GAUSS Mathematical and Statistical language
+*/
+function(hljs) {
+ var KEYWORDS = {
+ keyword: 'and bool break call callexe checkinterrupt clear clearg closeall cls comlog compile ' +
+ 'continue create debug declare delete disable dlibrary dllcall do dos ed edit else ' +
+ 'elseif enable end endfor endif endp endo errorlog errorlogat expr external fn ' +
+ 'for format goto gosub graph if keyword let lib library line load loadarray loadexe ' +
+ 'loadf loadk loadm loadp loads loadx local locate loopnextindex lprint lpwidth lshow ' +
+ 'matrix msym ndpclex new not open or output outwidth plot plotsym pop prcsn print ' +
+ 'printdos proc push retp return rndcon rndmod rndmult rndseed run save saveall screen ' +
+ 'scroll setarray show sparse stop string struct system trace trap threadfor ' +
+ 'threadendfor threadbegin threadjoin threadstat threadend until use while winprint',
+ built_in: 'abs acf aconcat aeye amax amean AmericanBinomCall AmericanBinomCall_Greeks AmericanBinomCall_ImpVol ' +
+ 'AmericanBinomPut AmericanBinomPut_Greeks AmericanBinomPut_ImpVol AmericanBSCall AmericanBSCall_Greeks ' +
+ 'AmericanBSCall_ImpVol AmericanBSPut AmericanBSPut_Greeks AmericanBSPut_ImpVol amin amult annotationGetDefaults ' +
+ 'annotationSetBkd annotationSetFont annotationSetLineColor annotationSetLineStyle annotationSetLineThickness ' +
+ 'annualTradingDays arccos arcsin areshape arrayalloc arrayindex arrayinit arraytomat asciiload asclabel astd ' +
+ 'astds asum atan atan2 atranspose axmargin balance band bandchol bandcholsol bandltsol bandrv bandsolpd bar ' +
+ 'base10 begwind besselj bessely beta box boxcox cdfBeta cdfBetaInv cdfBinomial cdfBinomialInv cdfBvn cdfBvn2 ' +
+ 'cdfBvn2e cdfCauchy cdfCauchyInv cdfChic cdfChii cdfChinc cdfChincInv cdfExp cdfExpInv cdfFc cdfFnc cdfFncInv ' +
+ 'cdfGam cdfGenPareto cdfHyperGeo cdfLaplace cdfLaplaceInv cdfLogistic cdfLogisticInv cdfmControlCreate cdfMvn ' +
+ 'cdfMvn2e cdfMvnce cdfMvne cdfMvt2e cdfMvtce cdfMvte cdfN cdfN2 cdfNc cdfNegBinomial cdfNegBinomialInv cdfNi ' +
+ 'cdfPoisson cdfPoissonInv cdfRayleigh cdfRayleighInv cdfTc cdfTci cdfTnc cdfTvn cdfWeibull cdfWeibullInv cdir ' +
+ 'ceil ChangeDir chdir chiBarSquare chol choldn cholsol cholup chrs close code cols colsf combinate combinated ' +
+ 'complex con cond conj cons ConScore contour conv convertsatostr convertstrtosa corrm corrms corrvc corrx corrxs ' +
+ 'cos cosh counts countwts crossprd crout croutp csrcol csrlin csvReadM csvReadSA cumprodc cumsumc curve cvtos ' +
+ 'datacreate datacreatecomplex datalist dataload dataloop dataopen datasave date datestr datestring datestrymd ' +
+ 'dayinyr dayofweek dbAddDatabase dbClose dbCommit dbCreateQuery dbExecQuery dbGetConnectOptions dbGetDatabaseName ' +
+ 'dbGetDriverName dbGetDrivers dbGetHostName dbGetLastErrorNum dbGetLastErrorText dbGetNumericalPrecPolicy ' +
+ 'dbGetPassword dbGetPort dbGetTableHeaders dbGetTables dbGetUserName dbHasFeature dbIsDriverAvailable dbIsOpen ' +
+ 'dbIsOpenError dbOpen dbQueryBindValue dbQueryClear dbQueryCols dbQueryExecPrepared dbQueryFetchAllM dbQueryFetchAllSA ' +
+ 'dbQueryFetchOneM dbQueryFetchOneSA dbQueryFinish dbQueryGetBoundValue dbQueryGetBoundValues dbQueryGetField ' +
+ 'dbQueryGetLastErrorNum dbQueryGetLastErrorText dbQueryGetLastInsertID dbQueryGetLastQuery dbQueryGetPosition ' +
+ 'dbQueryIsActive dbQueryIsForwardOnly dbQueryIsNull dbQueryIsSelect dbQueryIsValid dbQueryPrepare dbQueryRows ' +
+ 'dbQuerySeek dbQuerySeekFirst dbQuerySeekLast dbQuerySeekNext dbQuerySeekPrevious dbQuerySetForwardOnly ' +
+ 'dbRemoveDatabase dbRollback dbSetConnectOptions dbSetDatabaseName dbSetHostName dbSetNumericalPrecPolicy ' +
+ 'dbSetPort dbSetUserName dbTransaction DeleteFile delif delrows denseToSp denseToSpRE denToZero design det detl ' +
+ 'dfft dffti diag diagrv digamma doswin DOSWinCloseall DOSWinOpen dotfeq dotfeqmt dotfge dotfgemt dotfgt dotfgtmt ' +
+ 'dotfle dotflemt dotflt dotfltmt dotfne dotfnemt draw drop dsCreate dstat dstatmt dstatmtControlCreate dtdate dtday ' +
+ 'dttime dttodtv dttostr dttoutc dtvnormal dtvtodt dtvtoutc dummy dummybr dummydn eig eigh eighv eigv elapsedTradingDays ' +
+ 'endwind envget eof eqSolve eqSolvemt eqSolvemtControlCreate eqSolvemtOutCreate eqSolveset erf erfc erfccplx erfcplx error ' +
+ 'etdays ethsec etstr EuropeanBinomCall EuropeanBinomCall_Greeks EuropeanBinomCall_ImpVol EuropeanBinomPut ' +
+ 'EuropeanBinomPut_Greeks EuropeanBinomPut_ImpVol EuropeanBSCall EuropeanBSCall_Greeks EuropeanBSCall_ImpVol ' +
+ 'EuropeanBSPut EuropeanBSPut_Greeks EuropeanBSPut_ImpVol exctsmpl exec execbg exp extern eye fcheckerr fclearerr feq ' +
+ 'feqmt fflush fft ffti fftm fftmi fftn fge fgemt fgets fgetsa fgetsat fgetst fgt fgtmt fileinfo filesa fle flemt ' +
+ 'floor flt fltmt fmod fne fnemt fonts fopen formatcv formatnv fputs fputst fseek fstrerror ftell ftocv ftos ftostrC ' +
+ 'gamma gammacplx gammaii gausset gdaAppend gdaCreate gdaDStat gdaDStatMat gdaGetIndex gdaGetName gdaGetNames gdaGetOrders ' +
+ 'gdaGetType gdaGetTypes gdaGetVarInfo gdaIsCplx gdaLoad gdaPack gdaRead gdaReadByIndex gdaReadSome gdaReadSparse ' +
+ 'gdaReadStruct gdaReportVarInfo gdaSave gdaUpdate gdaUpdateAndPack gdaVars gdaWrite gdaWrite32 gdaWriteSome getarray ' +
+ 'getdims getf getGAUSShome getmatrix getmatrix4D getname getnamef getNextTradingDay getNextWeekDay getnr getorders ' +
+ 'getpath getPreviousTradingDay getPreviousWeekDay getRow getscalar3D getscalar4D getTrRow getwind glm gradcplx gradMT ' +
+ 'gradMTm gradMTT gradMTTm gradp graphprt graphset hasimag header headermt hess hessMT hessMTg hessMTgw hessMTm ' +
+ 'hessMTmw hessMTT hessMTTg hessMTTgw hessMTTm hessMTw hessp hist histf histp hsec imag indcv indexcat indices indices2 ' +
+ 'indicesf indicesfn indnv indsav indx integrate1d integrateControlCreate intgrat2 intgrat3 inthp1 inthp2 inthp3 inthp4 ' +
+ 'inthpControlCreate intquad1 intquad2 intquad3 intrleav intrleavsa intrsect intsimp inv invpd invswp iscplx iscplxf ' +
+ 'isden isinfnanmiss ismiss key keyav keyw lag lag1 lagn lapEighb lapEighi lapEighvb lapEighvi lapgEig lapgEigh lapgEighv ' +
+ 'lapgEigv lapgSchur lapgSvdcst lapgSvds lapgSvdst lapSvdcusv lapSvds lapSvdusv ldlp ldlsol linSolve listwise ln lncdfbvn ' +
+ 'lncdfbvn2 lncdfmvn lncdfn lncdfn2 lncdfnc lnfact lngammacplx lnpdfmvn lnpdfmvt lnpdfn lnpdft loadd loadstruct loadwind ' +
+ 'loess loessmt loessmtControlCreate log loglog logx logy lower lowmat lowmat1 ltrisol lu lusol machEpsilon make makevars ' +
+ 'makewind margin matalloc matinit mattoarray maxbytes maxc maxindc maxv maxvec mbesselei mbesselei0 mbesselei1 mbesseli ' +
+ 'mbesseli0 mbesseli1 meanc median mergeby mergevar minc minindc minv miss missex missrv moment momentd movingave ' +
+ 'movingaveExpwgt movingaveWgt nextindex nextn nextnevn nextwind ntos null null1 numCombinations ols olsmt olsmtControlCreate ' +
+ 'olsqr olsqr2 olsqrmt ones optn optnevn orth outtyp pacf packedToSp packr parse pause pdfCauchy pdfChi pdfExp pdfGenPareto ' +
+ 'pdfHyperGeo pdfLaplace pdfLogistic pdfn pdfPoisson pdfRayleigh pdfWeibull pi pinv pinvmt plotAddArrow plotAddBar plotAddBox ' +
+ 'plotAddHist plotAddHistF plotAddHistP plotAddPolar plotAddScatter plotAddShape plotAddTextbox plotAddTS plotAddXY plotArea ' +
+ 'plotBar plotBox plotClearLayout plotContour plotCustomLayout plotGetDefaults plotHist plotHistF plotHistP plotLayout ' +
+ 'plotLogLog plotLogX plotLogY plotOpenWindow plotPolar plotSave plotScatter plotSetAxesPen plotSetBar plotSetBarFill ' +
+ 'plotSetBarStacked plotSetBkdColor plotSetFill plotSetGrid plotSetLegend plotSetLineColor plotSetLineStyle plotSetLineSymbol ' +
+ 'plotSetLineThickness plotSetNewWindow plotSetTitle plotSetWhichYAxis plotSetXAxisShow plotSetXLabel plotSetXRange ' +
+ 'plotSetXTicInterval plotSetXTicLabel plotSetYAxisShow plotSetYLabel plotSetYRange plotSetZAxisShow plotSetZLabel ' +
+ 'plotSurface plotTS plotXY polar polychar polyeval polygamma polyint polymake polymat polymroot polymult polyroot ' +
+ 'pqgwin previousindex princomp printfm printfmt prodc psi putarray putf putvals pvCreate pvGetIndex pvGetParNames ' +
+ 'pvGetParVector pvLength pvList pvPack pvPacki pvPackm pvPackmi pvPacks pvPacksi pvPacksm pvPacksmi pvPutParVector ' +
+ 'pvTest pvUnpack QNewton QNewtonmt QNewtonmtControlCreate QNewtonmtOutCreate QNewtonSet QProg QProgmt QProgmtInCreate ' +
+ 'qqr qqre qqrep qr qre qrep qrsol qrtsol qtyr qtyre qtyrep quantile quantiled qyr qyre qyrep qz rank rankindx readr ' +
+ 'real reclassify reclassifyCuts recode recserar recsercp recserrc rerun rescale reshape rets rev rfft rffti rfftip rfftn ' +
+ 'rfftnp rfftp rndBernoulli rndBeta rndBinomial rndCauchy rndChiSquare rndCon rndCreateState rndExp rndGamma rndGeo rndGumbel ' +
+ 'rndHyperGeo rndi rndKMbeta rndKMgam rndKMi rndKMn rndKMnb rndKMp rndKMu rndKMvm rndLaplace rndLCbeta rndLCgam rndLCi rndLCn ' +
+ 'rndLCnb rndLCp rndLCu rndLCvm rndLogNorm rndMTu rndMVn rndMVt rndn rndnb rndNegBinomial rndp rndPoisson rndRayleigh ' +
+ 'rndStateSkip rndu rndvm rndWeibull rndWishart rotater round rows rowsf rref sampleData satostrC saved saveStruct savewind ' +
+ 'scale scale3d scalerr scalinfnanmiss scalmiss schtoc schur searchsourcepath seekr select selif seqa seqm setdif setdifsa ' +
+ 'setvars setvwrmode setwind shell shiftr sin singleindex sinh sleep solpd sortc sortcc sortd sorthc sorthcc sortind ' +
+ 'sortindc sortmc sortr sortrc spBiconjGradSol spChol spConjGradSol spCreate spDenseSubmat spDiagRvMat spEigv spEye spLDL ' +
+ 'spline spLU spNumNZE spOnes spreadSheetReadM spreadSheetReadSA spreadSheetWrite spScale spSubmat spToDense spTrTDense ' +
+ 'spTScalar spZeros sqpSolve sqpSolveMT sqpSolveMTControlCreate sqpSolveMTlagrangeCreate sqpSolveMToutCreate sqpSolveSet ' +
+ 'sqrt statements stdc stdsc stocv stof strcombine strindx strlen strput strrindx strsect strsplit strsplitPad strtodt ' +
+ 'strtof strtofcplx strtriml strtrimr strtrunc strtruncl strtruncpad strtruncr submat subscat substute subvec sumc sumr ' +
+ 'surface svd svd1 svd2 svdcusv svds svdusv sysstate tab tan tanh tempname threadBegin threadEnd threadEndFor threadFor ' +
+ 'threadJoin threadStat time timedt timestr timeutc title tkf2eps tkf2ps tocart todaydt toeplitz token topolar trapchk ' +
+ 'trigamma trimr trunc type typecv typef union unionsa uniqindx uniqindxsa unique uniquesa upmat upmat1 upper utctodt ' +
+ 'utctodtv utrisol vals varCovMS varCovXS varget vargetl varmall varmares varput varputl vartypef vcm vcms vcx vcxs ' +
+ 'vec vech vecr vector vget view viewxyz vlist vnamecv volume vput vread vtypecv wait waitc walkindex where window ' +
+ 'writer xlabel xlsGetSheetCount xlsGetSheetSize xlsGetSheetTypes xlsMakeRange xlsReadM xlsReadSA xlsWrite xlsWriteM ' +
+ 'xlsWriteSA xpnd xtics xy xyz ylabel ytics zeros zeta zlabel ztics',
+ literal: 'DB_AFTER_LAST_ROW DB_ALL_TABLES DB_BATCH_OPERATIONS DB_BEFORE_FIRST_ROW DB_BLOB DB_EVENT_NOTIFICATIONS ' +
+ 'DB_FINISH_QUERY DB_HIGH_PRECISION DB_LAST_INSERT_ID DB_LOW_PRECISION_DOUBLE DB_LOW_PRECISION_INT32 ' +
+ 'DB_LOW_PRECISION_INT64 DB_LOW_PRECISION_NUMBERS DB_MULTIPLE_RESULT_SETS DB_NAMED_PLACEHOLDERS ' +
+ 'DB_POSITIONAL_PLACEHOLDERS DB_PREPARED_QUERIES DB_QUERY_SIZE DB_SIMPLE_LOCKING DB_SYSTEM_TABLES DB_TABLES ' +
+ 'DB_TRANSACTIONS DB_UNICODE DB_VIEWS'
+ };
+
+ var PREPROCESSOR =
+ {
+ className: 'meta',
+ begin: '#', end: '$',
+ keywords: {'meta-keyword': 'define definecs|10 undef ifdef ifndef iflight ifdllcall ifmac ifos2win ifunix else endif lineson linesoff srcfile srcline'},
+ contains: [
+ {
+ begin: /\\\n/, relevance: 0
+ },
+ {
+ beginKeywords: 'include', end: '$',
+ keywords: {'meta-keyword': 'include'},
+ contains: [
+ {
+ className: 'meta-string',
+ begin: '"', end: '"',
+ illegal: '\\n'
+ }
+ ]
+ },
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE
+ ]
+ };
+
+ var FUNCTION_TITLE = hljs.UNDERSCORE_IDENT_RE + '\\s*\\(?';
+ var PARSE_PARAMS = [
+ {
+ className: 'params',
+ begin: /\(/, end: /\)/,
+ keywords: KEYWORDS,
+ relevance: 0,
+ contains: [
+ hljs.C_NUMBER_MODE,
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE
+ ]
+ }
+ ];
+
+ return {
+ aliases: ['gss'],
+ case_insensitive: true, // language is case-insensitive
+ keywords: KEYWORDS,
+ illegal: '(\\{[%#]|[%#]\\})',
+ contains: [
+ hljs.C_NUMBER_MODE,
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.COMMENT('@', '@'),
+ PREPROCESSOR,
+ {
+ className: 'string',
+ begin: '"', end: '"',
+ contains: [hljs.BACKSLASH_ESCAPE]
+ },
+ {
+ className: 'function',
+ beginKeywords: 'proc keyword',
+ end: ';',
+ excludeEnd: true,
+ keywords: KEYWORDS,
+ contains: [
+ {
+ begin: FUNCTION_TITLE, returnBegin: true,
+ contains: [hljs.UNDERSCORE_TITLE_MODE],
+ relevance: 0
+ },
+ hljs.C_NUMBER_MODE,
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ PREPROCESSOR
+ ].concat(PARSE_PARAMS)
+ },
+ {
+ className: 'function',
+ beginKeywords: 'fn',
+ end: ';',
+ excludeEnd: true,
+ keywords: KEYWORDS,
+ contains: [
+ {
+ begin: FUNCTION_TITLE + hljs.IDENT_RE + '\\)?\\s*\\=\\s*', returnBegin: true,
+ contains: [hljs.UNDERSCORE_TITLE_MODE],
+ relevance: 0
+ },
+ hljs.C_NUMBER_MODE,
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE
+ ].concat(PARSE_PARAMS)
+ },
+ {
+ className: 'function',
+ begin: '\\bexternal (proc|keyword|fn)\\s+',
+ end: ';',
+ excludeEnd: true,
+ keywords: KEYWORDS,
+ contains: [
+ {
+ begin: FUNCTION_TITLE, returnBegin: true,
+ contains: [hljs.UNDERSCORE_TITLE_MODE],
+ relevance: 0
+ },
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE
+ ]
+ },
+ {
+ className: 'function',
+ begin: '\\bexternal (matrix|string|array|sparse matrix|struct ' + hljs.IDENT_RE + ')\\s+',
+ end: ';',
+ excludeEnd: true,
+ keywords: KEYWORDS,
+ contains: [
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE
+ ]
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("gcode",
+/*
+ Language: G-code (ISO 6983)
+ Contributors: Adam Joseph Cook <adam.joseph.cook@gmail.com>
+ Description: G-code syntax highlighter for Fanuc and other common CNC machine tool controls.
+ */
+
+function(hljs) {
+ var GCODE_IDENT_RE = '[A-Z_][A-Z0-9_.]*';
+ var GCODE_CLOSE_RE = '\\%';
+ var GCODE_KEYWORDS =
+ 'IF DO WHILE ENDWHILE CALL ENDIF SUB ENDSUB GOTO REPEAT ENDREPEAT ' +
+ 'EQ LT GT NE GE LE OR XOR';
+ var GCODE_START = {
+ className: 'meta',
+ begin: '([O])([0-9]+)'
+ };
+ var GCODE_CODE = [
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.COMMENT(/\(/, /\)/),
+ hljs.inherit(hljs.C_NUMBER_MODE, {begin: '([-+]?([0-9]*\\.?[0-9]+\\.?))|' + hljs.C_NUMBER_RE}),
+ hljs.inherit(hljs.APOS_STRING_MODE, {illegal: null}),
+ hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null}),
+ {
+ className: 'name',
+ begin: '([G])([0-9]+\\.?[0-9]?)'
+ },
+ {
+ className: 'name',
+ begin: '([M])([0-9]+\\.?[0-9]?)'
+ },
+ {
+ className: 'attr',
+ begin: '(VC|VS|#)',
+ end: '(\\d+)'
+ },
+ {
+ className: 'attr',
+ begin: '(VZOFX|VZOFY|VZOFZ)'
+ },
+ {
+ className: 'built_in',
+ begin: '(ATAN|ABS|ACOS|ASIN|SIN|COS|EXP|FIX|FUP|ROUND|LN|TAN)(\\[)',
+ end: '([-+]?([0-9]*\\.?[0-9]+\\.?))(\\])'
+ },
+ {
+ className: 'symbol',
+ variants: [
+ {
+ begin: 'N', end: '\\d+',
+ illegal: '\\W'
+ }
+ ]
+ }
+ ];
+
+ return {
+ aliases: ['nc'],
+ // Some implementations (CNC controls) of G-code are interoperable with uppercase and lowercase letters seamlessly.
+ // However, most prefer all uppercase and uppercase is customary.
+ case_insensitive: true,
+ lexemes: GCODE_IDENT_RE,
+ keywords: GCODE_KEYWORDS,
+ contains: [
+ {
+ className: 'meta',
+ begin: GCODE_CLOSE_RE
+ },
+ GCODE_START
+ ].concat(GCODE_CODE)
+ };
+});
+
+hljs.registerLanguage("gherkin",
+/*
+ Language: Gherkin
+ Author: Sam Pikesley (@pikesley) <sam.pikesley@theodi.org>
+ Description: Gherkin (Cucumber etc)
+ */
+
+function (hljs) {
+ return {
+ aliases: ['feature'],
+ keywords: 'Feature Background Ability Business\ Need Scenario Scenarios Scenario\ Outline Scenario\ Template Examples Given And Then But When',
+ contains: [
+ {
+ className: 'symbol',
+ begin: '\\*',
+ relevance: 0
+ },
+ {
+ className: 'meta',
+ begin: '@[^@\\s]+'
+ },
+ {
+ begin: '\\|', end: '\\|\\w*$',
+ contains: [
+ {
+ className: 'string',
+ begin: '[^|]+'
+ }
+ ]
+ },
+ {
+ className: 'variable',
+ begin: '<', end: '>'
+ },
+ hljs.HASH_COMMENT_MODE,
+ {
+ className: 'string',
+ begin: '"""', end: '"""'
+ },
+ hljs.QUOTE_STRING_MODE
+ ]
+ };
+});
+
+hljs.registerLanguage("glsl",
+/*
+Language: GLSL
+Description: OpenGL Shading Language
+Author: Sergey Tikhomirov <sergey@tikhomirov.io>
+Category: graphics
+*/
+
+function(hljs) {
+ return {
+ keywords: {
+ keyword:
+ // Statements
+ 'break continue discard do else for if return while' +
+ // Qualifiers
+ 'attribute binding buffer ccw centroid centroid varying coherent column_major const cw ' +
+ 'depth_any depth_greater depth_less depth_unchanged early_fragment_tests equal_spacing ' +
+ 'flat fractional_even_spacing fractional_odd_spacing highp in index inout invariant ' +
+ 'invocations isolines layout line_strip lines lines_adjacency local_size_x local_size_y ' +
+ 'local_size_z location lowp max_vertices mediump noperspective offset origin_upper_left ' +
+ 'out packed patch pixel_center_integer point_mode points precise precision quads r11f_g11f_b10f '+
+ 'r16 r16_snorm r16f r16i r16ui r32f r32i r32ui r8 r8_snorm r8i r8ui readonly restrict ' +
+ 'rg16 rg16_snorm rg16f rg16i rg16ui rg32f rg32i rg32ui rg8 rg8_snorm rg8i rg8ui rgb10_a2 ' +
+ 'rgb10_a2ui rgba16 rgba16_snorm rgba16f rgba16i rgba16ui rgba32f rgba32i rgba32ui rgba8 ' +
+ 'rgba8_snorm rgba8i rgba8ui row_major sample shared smooth std140 std430 stream triangle_strip ' +
+ 'triangles triangles_adjacency uniform varying vertices volatile writeonly',
+ type:
+ 'atomic_uint bool bvec2 bvec3 bvec4 dmat2 dmat2x2 dmat2x3 dmat2x4 dmat3 dmat3x2 dmat3x3 ' +
+ 'dmat3x4 dmat4 dmat4x2 dmat4x3 dmat4x4 double dvec2 dvec3 dvec4 float iimage1D iimage1DArray ' +
+ 'iimage2D iimage2DArray iimage2DMS iimage2DMSArray iimage2DRect iimage3D iimageBuffer' +
+ 'iimageCube iimageCubeArray image1D image1DArray image2D image2DArray image2DMS image2DMSArray ' +
+ 'image2DRect image3D imageBuffer imageCube imageCubeArray int isampler1D isampler1DArray ' +
+ 'isampler2D isampler2DArray isampler2DMS isampler2DMSArray isampler2DRect isampler3D ' +
+ 'isamplerBuffer isamplerCube isamplerCubeArray ivec2 ivec3 ivec4 mat2 mat2x2 mat2x3 ' +
+ 'mat2x4 mat3 mat3x2 mat3x3 mat3x4 mat4 mat4x2 mat4x3 mat4x4 sampler1D sampler1DArray ' +
+ 'sampler1DArrayShadow sampler1DShadow sampler2D sampler2DArray sampler2DArrayShadow ' +
+ 'sampler2DMS sampler2DMSArray sampler2DRect sampler2DRectShadow sampler2DShadow sampler3D ' +
+ 'samplerBuffer samplerCube samplerCubeArray samplerCubeArrayShadow samplerCubeShadow ' +
+ 'image1D uimage1DArray uimage2D uimage2DArray uimage2DMS uimage2DMSArray uimage2DRect ' +
+ 'uimage3D uimageBuffer uimageCube uimageCubeArray uint usampler1D usampler1DArray ' +
+ 'usampler2D usampler2DArray usampler2DMS usampler2DMSArray usampler2DRect usampler3D ' +
+ 'samplerBuffer usamplerCube usamplerCubeArray uvec2 uvec3 uvec4 vec2 vec3 vec4 void',
+ built_in:
+ // Constants
+ 'gl_MaxAtomicCounterBindings gl_MaxAtomicCounterBufferSize gl_MaxClipDistances gl_MaxClipPlanes ' +
+ 'gl_MaxCombinedAtomicCounterBuffers gl_MaxCombinedAtomicCounters gl_MaxCombinedImageUniforms ' +
+ 'gl_MaxCombinedImageUnitsAndFragmentOutputs gl_MaxCombinedTextureImageUnits gl_MaxComputeAtomicCounterBuffers ' +
+ 'gl_MaxComputeAtomicCounters gl_MaxComputeImageUniforms gl_MaxComputeTextureImageUnits ' +
+ 'gl_MaxComputeUniformComponents gl_MaxComputeWorkGroupCount gl_MaxComputeWorkGroupSize ' +
+ 'gl_MaxDrawBuffers gl_MaxFragmentAtomicCounterBuffers gl_MaxFragmentAtomicCounters ' +
+ 'gl_MaxFragmentImageUniforms gl_MaxFragmentInputComponents gl_MaxFragmentInputVectors ' +
+ 'gl_MaxFragmentUniformComponents gl_MaxFragmentUniformVectors gl_MaxGeometryAtomicCounterBuffers ' +
+ 'gl_MaxGeometryAtomicCounters gl_MaxGeometryImageUniforms gl_MaxGeometryInputComponents ' +
+ 'gl_MaxGeometryOutputComponents gl_MaxGeometryOutputVertices gl_MaxGeometryTextureImageUnits ' +
+ 'gl_MaxGeometryTotalOutputComponents gl_MaxGeometryUniformComponents gl_MaxGeometryVaryingComponents ' +
+ 'gl_MaxImageSamples gl_MaxImageUnits gl_MaxLights gl_MaxPatchVertices gl_MaxProgramTexelOffset ' +
+ 'gl_MaxTessControlAtomicCounterBuffers gl_MaxTessControlAtomicCounters gl_MaxTessControlImageUniforms ' +
+ 'gl_MaxTessControlInputComponents gl_MaxTessControlOutputComponents gl_MaxTessControlTextureImageUnits ' +
+ 'gl_MaxTessControlTotalOutputComponents gl_MaxTessControlUniformComponents ' +
+ 'gl_MaxTessEvaluationAtomicCounterBuffers gl_MaxTessEvaluationAtomicCounters ' +
+ 'gl_MaxTessEvaluationImageUniforms gl_MaxTessEvaluationInputComponents gl_MaxTessEvaluationOutputComponents ' +
+ 'gl_MaxTessEvaluationTextureImageUnits gl_MaxTessEvaluationUniformComponents ' +
+ 'gl_MaxTessGenLevel gl_MaxTessPatchComponents gl_MaxTextureCoords gl_MaxTextureImageUnits ' +
+ 'gl_MaxTextureUnits gl_MaxVaryingComponents gl_MaxVaryingFloats gl_MaxVaryingVectors ' +
+ 'gl_MaxVertexAtomicCounterBuffers gl_MaxVertexAtomicCounters gl_MaxVertexAttribs gl_MaxVertexImageUniforms ' +
+ 'gl_MaxVertexOutputComponents gl_MaxVertexOutputVectors gl_MaxVertexTextureImageUnits ' +
+ 'gl_MaxVertexUniformComponents gl_MaxVertexUniformVectors gl_MaxViewports gl_MinProgramTexelOffset ' +
+ // Variables
+ 'gl_BackColor gl_BackLightModelProduct gl_BackLightProduct gl_BackMaterial ' +
+ 'gl_BackSecondaryColor gl_ClipDistance gl_ClipPlane gl_ClipVertex gl_Color ' +
+ 'gl_DepthRange gl_EyePlaneQ gl_EyePlaneR gl_EyePlaneS gl_EyePlaneT gl_Fog gl_FogCoord ' +
+ 'gl_FogFragCoord gl_FragColor gl_FragCoord gl_FragData gl_FragDepth gl_FrontColor ' +
+ 'gl_FrontFacing gl_FrontLightModelProduct gl_FrontLightProduct gl_FrontMaterial ' +
+ 'gl_FrontSecondaryColor gl_GlobalInvocationID gl_InstanceID gl_InvocationID gl_Layer gl_LightModel ' +
+ 'gl_LightSource gl_LocalInvocationID gl_LocalInvocationIndex gl_ModelViewMatrix ' +
+ 'gl_ModelViewMatrixInverse gl_ModelViewMatrixInverseTranspose gl_ModelViewMatrixTranspose ' +
+ 'gl_ModelViewProjectionMatrix gl_ModelViewProjectionMatrixInverse gl_ModelViewProjectionMatrixInverseTranspose ' +
+ 'gl_ModelViewProjectionMatrixTranspose gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 ' +
+ 'gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 ' +
+ 'gl_Normal gl_NormalMatrix gl_NormalScale gl_NumSamples gl_NumWorkGroups gl_ObjectPlaneQ ' +
+ 'gl_ObjectPlaneR gl_ObjectPlaneS gl_ObjectPlaneT gl_PatchVerticesIn gl_Point gl_PointCoord ' +
+ 'gl_PointSize gl_Position gl_PrimitiveID gl_PrimitiveIDIn gl_ProjectionMatrix gl_ProjectionMatrixInverse ' +
+ 'gl_ProjectionMatrixInverseTranspose gl_ProjectionMatrixTranspose gl_SampleID gl_SampleMask ' +
+ 'gl_SampleMaskIn gl_SamplePosition gl_SecondaryColor gl_TessCoord gl_TessLevelInner gl_TessLevelOuter ' +
+ 'gl_TexCoord gl_TextureEnvColor gl_TextureMatrix gl_TextureMatrixInverse gl_TextureMatrixInverseTranspose ' +
+ 'gl_TextureMatrixTranspose gl_Vertex gl_VertexID gl_ViewportIndex gl_WorkGroupID gl_WorkGroupSize gl_in gl_out ' +
+ // Functions
+ 'EmitStreamVertex EmitVertex EndPrimitive EndStreamPrimitive abs acos acosh all any asin ' +
+ 'asinh atan atanh atomicAdd atomicAnd atomicCompSwap atomicCounter atomicCounterDecrement ' +
+ 'atomicCounterIncrement atomicExchange atomicMax atomicMin atomicOr atomicXor barrier ' +
+ 'bitCount bitfieldExtract bitfieldInsert bitfieldReverse ceil clamp cos cosh cross ' +
+ 'dFdx dFdy degrees determinant distance dot equal exp exp2 faceforward findLSB findMSB ' +
+ 'floatBitsToInt floatBitsToUint floor fma fract frexp ftransform fwidth greaterThan ' +
+ 'greaterThanEqual groupMemoryBarrier imageAtomicAdd imageAtomicAnd imageAtomicCompSwap ' +
+ 'imageAtomicExchange imageAtomicMax imageAtomicMin imageAtomicOr imageAtomicXor imageLoad ' +
+ 'imageSize imageStore imulExtended intBitsToFloat interpolateAtCentroid interpolateAtOffset ' +
+ 'interpolateAtSample inverse inversesqrt isinf isnan ldexp length lessThan lessThanEqual log ' +
+ 'log2 matrixCompMult max memoryBarrier memoryBarrierAtomicCounter memoryBarrierBuffer ' +
+ 'memoryBarrierImage memoryBarrierShared min mix mod modf noise1 noise2 noise3 noise4 ' +
+ 'normalize not notEqual outerProduct packDouble2x32 packHalf2x16 packSnorm2x16 packSnorm4x8 ' +
+ 'packUnorm2x16 packUnorm4x8 pow radians reflect refract round roundEven shadow1D shadow1DLod ' +
+ 'shadow1DProj shadow1DProjLod shadow2D shadow2DLod shadow2DProj shadow2DProjLod sign sin sinh ' +
+ 'smoothstep sqrt step tan tanh texelFetch texelFetchOffset texture texture1D texture1DLod ' +
+ 'texture1DProj texture1DProjLod texture2D texture2DLod texture2DProj texture2DProjLod ' +
+ 'texture3D texture3DLod texture3DProj texture3DProjLod textureCube textureCubeLod ' +
+ 'textureGather textureGatherOffset textureGatherOffsets textureGrad textureGradOffset ' +
+ 'textureLod textureLodOffset textureOffset textureProj textureProjGrad textureProjGradOffset ' +
+ 'textureProjLod textureProjLodOffset textureProjOffset textureQueryLevels textureQueryLod ' +
+ 'textureSize transpose trunc uaddCarry uintBitsToFloat umulExtended unpackDouble2x32 ' +
+ 'unpackHalf2x16 unpackSnorm2x16 unpackSnorm4x8 unpackUnorm2x16 unpackUnorm4x8 usubBorrow',
+ literal: 'true false'
+ },
+ illegal: '"',
+ contains: [
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.C_NUMBER_MODE,
+ {
+ className: 'meta',
+ begin: '#', end: '$'
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("go",
+/*
+Language: Go
+Author: Stephan Kountso aka StepLg <steplg@gmail.com>
+Contributors: Evgeny Stepanischev <imbolk@gmail.com>
+Description: Google go language (golang). For info about language see http://golang.org/
+Category: system
+*/
+
+function(hljs) {
+ var GO_KEYWORDS = {
+ keyword:
+ 'break default func interface select case map struct chan else goto package switch ' +
+ 'const fallthrough if range type continue for import return var go defer ' +
+ 'bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 ' +
+ 'uint16 uint32 uint64 int uint uintptr rune',
+ literal:
+ 'true false iota nil',
+ built_in:
+ 'append cap close complex copy imag len make new panic print println real recover delete'
+ };
+ return {
+ aliases: ['golang'],
+ keywords: GO_KEYWORDS,
+ illegal: '</',
+ contains: [
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ {
+ className: 'string',
+ variants: [
+ hljs.QUOTE_STRING_MODE,
+ {begin: '\'', end: '[^\\\\]\''},
+ {begin: '`', end: '`'},
+ ]
+ },
+ {
+ className: 'number',
+ variants: [
+ {begin: hljs.C_NUMBER_RE + '[dflsi]', relevance: 1},
+ hljs.C_NUMBER_MODE
+ ]
+ },
+ {
+ begin: /:=/ // relevance booster
+ },
+ {
+ className: 'function',
+ beginKeywords: 'func', end: /\s*\{/, excludeEnd: true,
+ contains: [
+ hljs.TITLE_MODE,
+ {
+ className: 'params',
+ begin: /\(/, end: /\)/,
+ keywords: GO_KEYWORDS,
+ illegal: /["']/
+ }
+ ]
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("golo",
+/*
+Language: Golo
+Author: Philippe Charriere <ph.charriere@gmail.com>
+Description: a lightweight dynamic language for the JVM, see http://golo-lang.org/
+*/
+
+function(hljs) {
+ return {
+ keywords: {
+ keyword:
+ 'println readln print import module function local return let var ' +
+ 'while for foreach times in case when match with break continue ' +
+ 'augment augmentation each find filter reduce ' +
+ 'if then else otherwise try catch finally raise throw orIfNull ' +
+ 'DynamicObject|10 DynamicVariable struct Observable map set vector list array',
+ literal:
+ 'true false null'
+ },
+ contains: [
+ hljs.HASH_COMMENT_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.C_NUMBER_MODE,
+ {
+ className: 'meta', begin: '@[A-Za-z]+'
+ }
+ ]
+ }
+});
+
+hljs.registerLanguage("gradle",
+/*
+Language: Gradle
+Author: Damian Mee <mee.damian@gmail.com>
+Website: http://meeDamian.com
+*/
+
+function(hljs) {
+ return {
+ case_insensitive: true,
+ keywords: {
+ keyword:
+ 'task project allprojects subprojects artifacts buildscript configurations ' +
+ 'dependencies repositories sourceSets description delete from into include ' +
+ 'exclude source classpath destinationDir includes options sourceCompatibility ' +
+ 'targetCompatibility group flatDir doLast doFirst flatten todir fromdir ant ' +
+ 'def abstract break case catch continue default do else extends final finally ' +
+ 'for if implements instanceof native new private protected public return static ' +
+ 'switch synchronized throw throws transient try volatile while strictfp package ' +
+ 'import false null super this true antlrtask checkstyle codenarc copy boolean ' +
+ 'byte char class double float int interface long short void compile runTime ' +
+ 'file fileTree abs any append asList asWritable call collect compareTo count ' +
+ 'div dump each eachByte eachFile eachLine every find findAll flatten getAt ' +
+ 'getErr getIn getOut getText grep immutable inject inspect intersect invokeMethods ' +
+ 'isCase join leftShift minus multiply newInputStream newOutputStream newPrintWriter ' +
+ 'newReader newWriter next plus pop power previous print println push putAt read ' +
+ 'readBytes readLines reverse reverseEach round size sort splitEachLine step subMap ' +
+ 'times toInteger toList tokenize upto waitForOrKill withPrintWriter withReader ' +
+ 'withStream withWriter withWriterAppend write writeLine'
+ },
+ contains: [
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.NUMBER_MODE,
+ hljs.REGEXP_MODE
+
+ ]
+ }
+});
+
+hljs.registerLanguage("groovy",
+/*
+ Language: Groovy
+ Author: Guillaume Laforge <glaforge@gmail.com>
+ Website: http://glaforge.appspot.com
+ Description: Groovy programming language implementation inspired from Vsevolod's Java mode
+ */
+
+function(hljs) {
+ return {
+ keywords: {
+ literal : 'true false null',
+ keyword:
+ 'byte short char int long boolean float double void ' +
+ // groovy specific keywords
+ 'def as in assert trait ' +
+ // common keywords with Java
+ 'super this abstract static volatile transient public private protected synchronized final ' +
+ 'class interface enum if else for while switch case break default continue ' +
+ 'throw throws try catch finally implements extends new import package return instanceof'
+ },
+
+ contains: [
+ hljs.COMMENT(
+ '/\\*\\*',
+ '\\*/',
+ {
+ relevance : 0,
+ contains : [
+ {
+ // eat up @'s in emails to prevent them to be recognized as doctags
+ begin: /\w+@/, relevance: 0
+ },
+ {
+ className : 'doctag',
+ begin : '@[A-Za-z]+'
+ }
+ ]
+ }
+ ),
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ {
+ className: 'string',
+ begin: '"""', end: '"""'
+ },
+ {
+ className: 'string',
+ begin: "'''", end: "'''"
+ },
+ {
+ className: 'string',
+ begin: "\\$/", end: "/\\$",
+ relevance: 10
+ },
+ hljs.APOS_STRING_MODE,
+ {
+ className: 'regexp',
+ begin: /~?\/[^\/\n]+\//,
+ contains: [
+ hljs.BACKSLASH_ESCAPE
+ ]
+ },
+ hljs.QUOTE_STRING_MODE,
+ {
+ className: 'meta',
+ begin: "^#!/usr/bin/env", end: '$',
+ illegal: '\n'
+ },
+ hljs.BINARY_NUMBER_MODE,
+ {
+ className: 'class',
+ beginKeywords: 'class interface trait enum', end: '{',
+ illegal: ':',
+ contains: [
+ {beginKeywords: 'extends implements'},
+ hljs.UNDERSCORE_TITLE_MODE
+ ]
+ },
+ hljs.C_NUMBER_MODE,
+ {
+ className: 'meta', begin: '@[A-Za-z]+'
+ },
+ {
+ // highlight map keys and named parameters as strings
+ className: 'string', begin: /[^\?]{0}[A-Za-z0-9_$]+ *:/
+ },
+ {
+ // catch middle element of the ternary operator
+ // to avoid highlight it as a label, named parameter, or map key
+ begin: /\?/, end: /\:/
+ },
+ {
+ // highlight labeled statements
+ className: 'symbol', begin: '^\\s*[A-Za-z0-9_$]+:',
+ relevance: 0
+ }
+ ],
+ illegal: /#|<\//
+ }
+});
+
+hljs.registerLanguage("haml",
+/*
+Language: Haml
+Requires: ruby.js
+Author: Dan Allen <dan.j.allen@gmail.com>
+Website: http://google.com/profiles/dan.j.allen
+Category: template
+*/
+
+// TODO support filter tags like :javascript, support inline HTML
+function(hljs) {
+ return {
+ case_insensitive: true,
+ contains: [
+ {
+ className: 'meta',
+ begin: '^!!!( (5|1\\.1|Strict|Frameset|Basic|Mobile|RDFa|XML\\b.*))?$',
+ relevance: 10
+ },
+ // FIXME these comments should be allowed to span indented lines
+ hljs.COMMENT(
+ '^\\s*(!=#|=#|-#|/).*$',
+ false,
+ {
+ relevance: 0
+ }
+ ),
+ {
+ begin: '^\\s*(-|=|!=)(?!#)',
+ starts: {
+ end: '\\n',
+ subLanguage: 'ruby'
+ }
+ },
+ {
+ className: 'tag',
+ begin: '^\\s*%',
+ contains: [
+ {
+ className: 'selector-tag',
+ begin: '\\w+'
+ },
+ {
+ className: 'selector-id',
+ begin: '#[\\w-]+'
+ },
+ {
+ className: 'selector-class',
+ begin: '\\.[\\w-]+'
+ },
+ {
+ begin: '{\\s*',
+ end: '\\s*}',
+ contains: [
+ {
+ begin: ':\\w+\\s*=>',
+ end: ',\\s+',
+ returnBegin: true,
+ endsWithParent: true,
+ contains: [
+ {
+ className: 'attr',
+ begin: ':\\w+'
+ },
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ {
+ begin: '\\w+',
+ relevance: 0
+ }
+ ]
+ }
+ ]
+ },
+ {
+ begin: '\\(\\s*',
+ end: '\\s*\\)',
+ excludeEnd: true,
+ contains: [
+ {
+ begin: '\\w+\\s*=',
+ end: '\\s+',
+ returnBegin: true,
+ endsWithParent: true,
+ contains: [
+ {
+ className: 'attr',
+ begin: '\\w+',
+ relevance: 0
+ },
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ {
+ begin: '\\w+',
+ relevance: 0
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ {
+ begin: '^\\s*[=~]\\s*'
+ },
+ {
+ begin: '#{',
+ starts: {
+ end: '}',
+ subLanguage: 'ruby'
+ }
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("handlebars",
+/*
+Language: Handlebars
+Requires: xml.js
+Author: Robin Ward <robin.ward@gmail.com>
+Description: Matcher for Handlebars as well as EmberJS additions.
+Category: template
+*/
+
+function(hljs) {
+ var BUILT_INS = {'builtin-name': 'each in with if else unless bindattr action collection debugger log outlet template unbound view yield'};
+ return {
+ aliases: ['hbs', 'html.hbs', 'html.handlebars'],
+ case_insensitive: true,
+ subLanguage: 'xml',
+ contains: [
+ hljs.COMMENT('{{!(--)?', '(--)?}}'),
+ {
+ className: 'template-tag',
+ begin: /\{\{[#\/]/, end: /\}\}/,
+ contains: [
+ {
+ className: 'name',
+ begin: /[a-zA-Z\.-]+/,
+ keywords: BUILT_INS,
+ starts: {
+ endsWithParent: true, relevance: 0,
+ contains: [
+ hljs.QUOTE_STRING_MODE
+ ]
+ }
+ }
+ ]
+ },
+ {
+ className: 'template-variable',
+ begin: /\{\{/, end: /\}\}/,
+ keywords: BUILT_INS
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("haskell",
+/*
+Language: Haskell
+Author: Jeremy Hull <sourdrums@gmail.com>
+Contributors: Zena Treep <zena.treep@gmail.com>
+Category: functional
+*/
+
+function(hljs) {
+ var COMMENT = {
+ variants: [
+ hljs.COMMENT('--', '$'),
+ hljs.COMMENT(
+ '{-',
+ '-}',
+ {
+ contains: ['self']
+ }
+ )
+ ]
+ };
+
+ var PRAGMA = {
+ className: 'meta',
+ begin: '{-#', end: '#-}'
+ };
+
+ var PREPROCESSOR = {
+ className: 'meta',
+ begin: '^#', end: '$'
+ };
+
+ var CONSTRUCTOR = {
+ className: 'type',
+ begin: '\\b[A-Z][\\w\']*', // TODO: other constructors (build-in, infix).
+ relevance: 0
+ };
+
+ var LIST = {
+ begin: '\\(', end: '\\)',
+ illegal: '"',
+ contains: [
+ PRAGMA,
+ PREPROCESSOR,
+ {className: 'type', begin: '\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?'},
+ hljs.inherit(hljs.TITLE_MODE, {begin: '[_a-z][\\w\']*'}),
+ COMMENT
+ ]
+ };
+
+ var RECORD = {
+ begin: '{', end: '}',
+ contains: LIST.contains
+ };
+
+ return {
+ aliases: ['hs'],
+ keywords:
+ 'let in if then else case of where do module import hiding ' +
+ 'qualified type data newtype deriving class instance as default ' +
+ 'infix infixl infixr foreign export ccall stdcall cplusplus ' +
+ 'jvm dotnet safe unsafe family forall mdo proc rec',
+ contains: [
+
+ // Top-level constructions.
+
+ {
+ beginKeywords: 'module', end: 'where',
+ keywords: 'module where',
+ contains: [LIST, COMMENT],
+ illegal: '\\W\\.|;'
+ },
+ {
+ begin: '\\bimport\\b', end: '$',
+ keywords: 'import qualified as hiding',
+ contains: [LIST, COMMENT],
+ illegal: '\\W\\.|;'
+ },
+
+ {
+ className: 'class',
+ begin: '^(\\s*)?(class|instance)\\b', end: 'where',
+ keywords: 'class family instance where',
+ contains: [CONSTRUCTOR, LIST, COMMENT]
+ },
+ {
+ className: 'class',
+ begin: '\\b(data|(new)?type)\\b', end: '$',
+ keywords: 'data family type newtype deriving',
+ contains: [PRAGMA, CONSTRUCTOR, LIST, RECORD, COMMENT]
+ },
+ {
+ beginKeywords: 'default', end: '$',
+ contains: [CONSTRUCTOR, LIST, COMMENT]
+ },
+ {
+ beginKeywords: 'infix infixl infixr', end: '$',
+ contains: [hljs.C_NUMBER_MODE, COMMENT]
+ },
+ {
+ begin: '\\bforeign\\b', end: '$',
+ keywords: 'foreign import export ccall stdcall cplusplus jvm ' +
+ 'dotnet safe unsafe',
+ contains: [CONSTRUCTOR, hljs.QUOTE_STRING_MODE, COMMENT]
+ },
+ {
+ className: 'meta',
+ begin: '#!\\/usr\\/bin\\/env\ runhaskell', end: '$'
+ },
+
+ // "Whitespaces".
+
+ PRAGMA,
+ PREPROCESSOR,
+
+ // Literals and names.
+
+ // TODO: characters.
+ hljs.QUOTE_STRING_MODE,
+ hljs.C_NUMBER_MODE,
+ CONSTRUCTOR,
+ hljs.inherit(hljs.TITLE_MODE, {begin: '^[_a-z][\\w\']*'}),
+
+ COMMENT,
+
+ {begin: '->|<-'} // No markup, relevance booster
+ ]
+ };
+});
+
+hljs.registerLanguage("haxe",
+/*
+Language: Haxe
+Author: Christopher Kaster <ikasoki@gmail.com> (Based on the actionscript.js language file by Alexander Myadzel)
+*/
+
+function(hljs) {
+ var IDENT_RE = '[a-zA-Z_$][a-zA-Z0-9_$]*';
+ var IDENT_FUNC_RETURN_TYPE_RE = '([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)';
+
+ return {
+ aliases: ['hx'],
+ keywords: {
+ keyword: 'break callback case cast catch class continue default do dynamic else enum extends extern ' +
+ 'for function here if implements import in inline interface never new override package private ' +
+ 'public return static super switch this throw trace try typedef untyped using var while',
+ literal: 'true false null'
+ },
+ contains: [
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.C_NUMBER_MODE,
+ {
+ className: 'class',
+ beginKeywords: 'class interface', end: '{', excludeEnd: true,
+ contains: [
+ {
+ beginKeywords: 'extends implements'
+ },
+ hljs.TITLE_MODE
+ ]
+ },
+ {
+ className: 'meta',
+ begin: '#', end: '$',
+ keywords: {'meta-keyword': 'if else elseif end error'}
+ },
+ {
+ className: 'function',
+ beginKeywords: 'function', end: '[{;]', excludeEnd: true,
+ illegal: '\\S',
+ contains: [
+ hljs.TITLE_MODE,
+ {
+ className: 'params',
+ begin: '\\(', end: '\\)',
+ contains: [
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE
+ ]
+ },
+ {
+ begin: ':\\s*' + IDENT_FUNC_RETURN_TYPE_RE
+ }
+ ]
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("hsp",
+/*
+Language: HSP
+Author: prince <MC.prince.0203@gmail.com>
+Website: http://prince.webcrow.jp/
+Category: scripting
+*/
+
+function(hljs) {
+ return {
+ case_insensitive: true,
+ lexemes: /[\w\._]+/,
+ keywords: 'goto gosub return break repeat loop continue wait await dim sdim foreach dimtype dup dupptr end stop newmod delmod mref run exgoto on mcall assert logmes newlab resume yield onexit onerror onkey onclick oncmd exist delete mkdir chdir dirlist bload bsave bcopy memfile if else poke wpoke lpoke getstr chdpm memexpand memcpy memset notesel noteadd notedel noteload notesave randomize noteunsel noteget split strrep setease button chgdisp exec dialog mmload mmplay mmstop mci pset pget syscolor mes print title pos circle cls font sysfont objsize picload color palcolor palette redraw width gsel gcopy gzoom gmode bmpsave hsvcolor getkey listbox chkbox combox input mesbox buffer screen bgscr mouse objsel groll line clrobj boxf objprm objmode stick grect grotate gsquare gradf objimage objskip objenable celload celdiv celput newcom querycom delcom cnvstow comres axobj winobj sendmsg comevent comevarg sarrayconv callfunc cnvwtos comevdisp libptr system hspstat hspver stat cnt err strsize looplev sublev iparam wparam lparam refstr refdval int rnd strlen length length2 length3 length4 vartype gettime peek wpeek lpeek varptr varuse noteinfo instr abs limit getease str strmid strf getpath strtrim sin cos tan atan sqrt double absf expf logf limitf powf geteasef mousex mousey mousew hwnd hinstance hdc ginfo objinfo dirinfo sysinfo thismod __hspver__ __hsp30__ __date__ __time__ __line__ __file__ _debug __hspdef__ and or xor not screen_normal screen_palette screen_hide screen_fixedsize screen_tool screen_frame gmode_gdi gmode_mem gmode_rgb0 gmode_alpha gmode_rgb0alpha gmode_add gmode_sub gmode_pixela ginfo_mx ginfo_my ginfo_act ginfo_sel ginfo_wx1 ginfo_wy1 ginfo_wx2 ginfo_wy2 ginfo_vx ginfo_vy ginfo_sizex ginfo_sizey ginfo_winx ginfo_winy ginfo_mesx ginfo_mesy ginfo_r ginfo_g ginfo_b ginfo_paluse ginfo_dispx ginfo_dispy ginfo_cx ginfo_cy ginfo_intid ginfo_newid ginfo_sx ginfo_sy objinfo_mode objinfo_bmscr objinfo_hwnd notemax notesize dir_cur dir_exe dir_win dir_sys dir_cmdline dir_desktop dir_mydoc dir_tv font_normal font_bold font_italic font_underline font_strikeout font_antialias objmode_normal objmode_guifont objmode_usefont gsquare_grad msgothic msmincho do until while wend for next _break _continue switch case default swbreak swend ddim ldim alloc m_pi rad2deg deg2rad ease_linear ease_quad_in ease_quad_out ease_quad_inout ease_cubic_in ease_cubic_out ease_cubic_inout ease_quartic_in ease_quartic_out ease_quartic_inout ease_bounce_in ease_bounce_out ease_bounce_inout ease_shake_in ease_shake_out ease_shake_inout ease_loop',
+ contains: [
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.APOS_STRING_MODE,
+
+ {
+ // multi-line string
+ className: 'string',
+ begin: '{"', end: '"}',
+ contains: [hljs.BACKSLASH_ESCAPE]
+ },
+
+ hljs.COMMENT(';', '$', {relevance: 0}),
+
+ {
+ // pre-processor
+ className: 'meta',
+ begin: '#', end: '$',
+ keywords: {'meta-keyword': 'addion cfunc cmd cmpopt comfunc const defcfunc deffunc define else endif enum epack func global if ifdef ifndef include modcfunc modfunc modinit modterm module pack packopt regcmd runtime undef usecom uselib'},
+ contains: [
+ hljs.inherit(hljs.QUOTE_STRING_MODE, {className: 'meta-string'}),
+ hljs.NUMBER_MODE,
+ hljs.C_NUMBER_MODE,
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE
+ ]
+ },
+
+ {
+ // label
+ className: 'symbol',
+ begin: '^\\*(\\w+|@)'
+ },
+
+ hljs.NUMBER_MODE,
+ hljs.C_NUMBER_MODE
+ ]
+ };
+});
+
+hljs.registerLanguage("htmlbars",
+/*
+Language: HTMLBars
+Requires: xml.js
+Author: Michael Johnston <lastobelus@gmail.com>
+Description: Matcher for HTMLBars
+Category: template
+*/
+
+function(hljs) {
+ var BUILT_INS = 'action collection component concat debugger each each-in else get hash if input link-to loc log mut outlet partial query-params render textarea unbound unless with yield view';
+
+ var ATTR_ASSIGNMENT = {
+ illegal: /\}\}/,
+ begin: /[a-zA-Z0-9_]+=/,
+ returnBegin: true,
+ relevance: 0,
+ contains: [
+ {
+ className: 'attr', begin: /[a-zA-Z0-9_]+/
+ }
+ ]
+ };
+
+ var SUB_EXPR = {
+ illegal: /\}\}/,
+ begin: /\)/, end: /\)/,
+ contains: [
+ {
+ begin: /[a-zA-Z\.\-]+/,
+ keywords: {built_in: BUILT_INS},
+ starts: {
+ endsWithParent: true, relevance: 0,
+ contains: [
+ hljs.QUOTE_STRING_MODE,
+ ]
+ }
+ }
+ ]
+ };
+
+ var TAG_INNARDS = {
+ endsWithParent: true, relevance: 0,
+ keywords: {keyword: 'as', built_in: BUILT_INS},
+ contains: [
+ hljs.QUOTE_STRING_MODE,
+ ATTR_ASSIGNMENT,
+ hljs.NUMBER_MODE
+ ]
+ };
+
+ return {
+ case_insensitive: true,
+ subLanguage: 'xml',
+ contains: [
+ hljs.COMMENT('{{!(--)?', '(--)?}}'),
+ {
+ className: 'template-tag',
+ begin: /\{\{[#\/]/, end: /\}\}/,
+ contains: [
+ {
+ className: 'name',
+ begin: /[a-zA-Z\.\-]+/,
+ keywords: {'builtin-name': BUILT_INS},
+ starts: TAG_INNARDS
+ }
+ ]
+ },
+ {
+ className: 'template-variable',
+ begin: /\{\{[a-zA-Z][a-zA-Z\-]+/, end: /\}\}/,
+ keywords: {keyword: 'as', built_in: BUILT_INS},
+ contains: [
+ hljs.QUOTE_STRING_MODE
+ ]
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("http",
+/*
+Language: HTTP
+Description: HTTP request and response headers with automatic body highlighting
+Author: Ivan Sagalaev <maniac@softwaremaniacs.org>
+Category: common, protocols
+*/
+
+function(hljs) {
+ var VERSION = 'HTTP/[0-9\\.]+';
+ return {
+ aliases: ['https'],
+ illegal: '\\S',
+ contains: [
+ {
+ begin: '^' + VERSION, end: '$',
+ contains: [{className: 'number', begin: '\\b\\d{3}\\b'}]
+ },
+ {
+ begin: '^[A-Z]+ (.*?) ' + VERSION + '$', returnBegin: true, end: '$',
+ contains: [
+ {
+ className: 'string',
+ begin: ' ', end: ' ',
+ excludeBegin: true, excludeEnd: true
+ },
+ {
+ begin: VERSION
+ },
+ {
+ className: 'keyword',
+ begin: '[A-Z]+'
+ }
+ ]
+ },
+ {
+ className: 'attribute',
+ begin: '^\\w', end: ': ', excludeEnd: true,
+ illegal: '\\n|\\s|=',
+ starts: {end: '$', relevance: 0}
+ },
+ {
+ begin: '\\n\\n',
+ starts: {subLanguage: [], endsWithParent: true}
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("inform7",
+/*
+Language: Inform 7
+Author: Bruno Dias <bruno.r.dias@gmail.com>
+Description: Language definition for Inform 7, a DSL for writing parser interactive fiction.
+*/
+
+function(hljs) {
+ var START_BRACKET = '\\[';
+ var END_BRACKET = '\\]';
+ return {
+ aliases: ['i7'],
+ case_insensitive: true,
+ keywords: {
+ // Some keywords more or less unique to I7, for relevance.
+ keyword:
+ // kind:
+ 'thing room person man woman animal container ' +
+ 'supporter backdrop door ' +
+ // characteristic:
+ 'scenery open closed locked inside gender ' +
+ // verb:
+ 'is are say understand ' +
+ // misc keyword:
+ 'kind of rule'
+ },
+ contains: [
+ {
+ className: 'string',
+ begin: '"', end: '"',
+ relevance: 0,
+ contains: [
+ {
+ className: 'subst',
+ begin: START_BRACKET, end: END_BRACKET
+ }
+ ]
+ },
+ {
+ className: 'section',
+ begin: /^(Volume|Book|Part|Chapter|Section|Table)\b/,
+ end: '$'
+ },
+ {
+ // Rule definition
+ // This is here for relevance.
+ begin: /^(Check|Carry out|Report|Instead of|To|Rule|When|Before|After)\b/,
+ end: ':',
+ contains: [
+ {
+ //Rule name
+ begin: '\\(This', end: '\\)'
+ }
+ ]
+ },
+ {
+ className: 'comment',
+ begin: START_BRACKET, end: END_BRACKET,
+ contains: ['self']
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("ini",
+/*
+Language: Ini
+Contributors: Guillaume Gomez <guillaume1.gomez@gmail.com>
+Category: common, config
+*/
+
+function(hljs) {
+ var STRING = {
+ className: "string",
+ contains: [hljs.BACKSLASH_ESCAPE],
+ variants: [
+ {
+ begin: "'''", end: "'''",
+ relevance: 10
+ }, {
+ begin: '"""', end: '"""',
+ relevance: 10
+ }, {
+ begin: '"', end: '"'
+ }, {
+ begin: "'", end: "'"
+ }
+ ]
+ };
+ return {
+ aliases: ['toml'],
+ case_insensitive: true,
+ illegal: /\S/,
+ contains: [
+ hljs.COMMENT(';', '$'),
+ hljs.HASH_COMMENT_MODE,
+ {
+ className: 'section',
+ begin: /^\s*\[+/, end: /\]+/
+ },
+ {
+ begin: /^[a-z0-9\[\]_-]+\s*=\s*/, end: '$',
+ returnBegin: true,
+ contains: [
+ {
+ className: 'attr',
+ begin: /[a-z0-9\[\]_-]+/
+ },
+ {
+ begin: /=/, endsWithParent: true,
+ relevance: 0,
+ contains: [
+ {
+ className: 'literal',
+ begin: /\bon|off|true|false|yes|no\b/
+ },
+ {
+ className: 'variable',
+ variants: [
+ {begin: /\$[\w\d"][\w\d_]*/},
+ {begin: /\$\{(.*?)}/}
+ ]
+ },
+ STRING,
+ {
+ className: 'number',
+ begin: /([\+\-]+)?[\d]+_[\d_]+/
+ },
+ hljs.NUMBER_MODE
+ ]
+ }
+ ]
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("irpf90",
+/*
+Language: IRPF90
+Author: Anthony Scemama <scemama@irsamc.ups-tlse.fr>
+Description: IRPF90 is an open-source Fortran code generator : http://irpf90.ups-tlse.fr
+Category: scientific
+*/
+
+function(hljs) {
+ var PARAMS = {
+ className: 'params',
+ begin: '\\(', end: '\\)'
+ };
+
+ var F_KEYWORDS = {
+ literal: '.False. .True.',
+ keyword: 'kind do while private call intrinsic where elsewhere ' +
+ 'type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then ' +
+ 'public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. ' +
+ 'goto save else use module select case ' +
+ 'access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit ' +
+ 'continue format pause cycle exit ' +
+ 'c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg ' +
+ 'synchronous nopass non_overridable pass protected volatile abstract extends import ' +
+ 'non_intrinsic value deferred generic final enumerator class associate bind enum ' +
+ 'c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t ' +
+ 'c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double ' +
+ 'c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr ' +
+ 'c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated c_f_pointer ' +
+ 'c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor ' +
+ 'numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ' +
+ 'ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive ' +
+ 'pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure ' +
+ 'integer real character complex logical dimension allocatable|10 parameter ' +
+ 'external implicit|10 none double precision assign intent optional pointer ' +
+ 'target in out common equivalence data ' +
+ // IRPF90 special keywords
+ 'begin_provider &begin_provider end_provider begin_shell end_shell begin_template end_template subst assert touch ' +
+ 'soft_touch provide no_dep free irp_if irp_else irp_endif irp_write irp_read',
+ built_in: 'alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint ' +
+ 'dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl ' +
+ 'algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama ' +
+ 'iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod ' +
+ 'qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log ' +
+ 'log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate ' +
+ 'adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product ' +
+ 'eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul ' +
+ 'maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product ' +
+ 'radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind ' +
+ 'set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer ' +
+ 'dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ' +
+ 'ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode ' +
+ 'is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_of' +
+ 'acosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 ' +
+ 'atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits ' +
+ 'bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr ' +
+ 'num_images parity popcnt poppar shifta shiftl shiftr this_image ' +
+ // IRPF90 special built_ins
+ 'IRP_ALIGN irp_here'
+ };
+ return {
+ case_insensitive: true,
+ keywords: F_KEYWORDS,
+ illegal: /\/\*/,
+ contains: [
+ hljs.inherit(hljs.APOS_STRING_MODE, {className: 'string', relevance: 0}),
+ hljs.inherit(hljs.QUOTE_STRING_MODE, {className: 'string', relevance: 0}),
+ {
+ className: 'function',
+ beginKeywords: 'subroutine function program',
+ illegal: '[${=\\n]',
+ contains: [hljs.UNDERSCORE_TITLE_MODE, PARAMS]
+ },
+ hljs.COMMENT('!', '$', {relevance: 0}),
+ hljs.COMMENT('begin_doc', 'end_doc', {relevance: 10}),
+ {
+ className: 'number',
+ begin: '(?=\\b|\\+|\\-|\\.)(?=\\.\\d|\\d)(?:\\d+)?(?:\\.?\\d*)(?:[de][+-]?\\d+)?\\b\\.?',
+ relevance: 0
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("java",
+/*
+Language: Java
+Author: Vsevolod Solovyov <vsevolod.solovyov@gmail.com>
+Category: common, enterprise
+*/
+
+function(hljs) {
+ var GENERIC_IDENT_RE = hljs.UNDERSCORE_IDENT_RE + '(<' + hljs.UNDERSCORE_IDENT_RE + '(\\s*,\\s*' + hljs.UNDERSCORE_IDENT_RE + ')*>)?';
+ var KEYWORDS =
+ 'false synchronized int abstract float private char boolean static null if const ' +
+ 'for true while long strictfp finally protected import native final void ' +
+ 'enum else break transient catch instanceof byte super volatile case assert short ' +
+ 'package default double public try this switch continue throws protected public private ' +
+ 'module requires exports';
+
+ // https://docs.oracle.com/javase/7/docs/technotes/guides/language/underscores-literals.html
+ var JAVA_NUMBER_RE = '\\b' +
+ '(' +
+ '0[bB]([01]+[01_]+[01]+|[01]+)' + // 0b...
+ '|' +
+ '0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)' + // 0x...
+ '|' +
+ '(' +
+ '([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?' +
+ '|' +
+ '\\.([\\d]+[\\d_]+[\\d]+|[\\d]+)' +
+ ')' +
+ '([eE][-+]?\\d+)?' + // octal, decimal, float
+ ')' +
+ '[lLfF]?';
+ var JAVA_NUMBER_MODE = {
+ className: 'number',
+ begin: JAVA_NUMBER_RE,
+ relevance: 0
+ };
+
+ return {
+ aliases: ['jsp'],
+ keywords: KEYWORDS,
+ illegal: /<\/|#/,
+ contains: [
+ hljs.COMMENT(
+ '/\\*\\*',
+ '\\*/',
+ {
+ relevance : 0,
+ contains : [
+ {
+ // eat up @'s in emails to prevent them to be recognized as doctags
+ begin: /\w+@/, relevance: 0
+ },
+ {
+ className : 'doctag',
+ begin : '@[A-Za-z]+'
+ }
+ ]
+ }
+ ),
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ {
+ className: 'class',
+ beginKeywords: 'class interface', end: /[{;=]/, excludeEnd: true,
+ keywords: 'class interface',
+ illegal: /[:"\[\]]/,
+ contains: [
+ {beginKeywords: 'extends implements'},
+ hljs.UNDERSCORE_TITLE_MODE
+ ]
+ },
+ {
+ // Expression keywords prevent 'keyword Name(...)' from being
+ // recognized as a function definition
+ beginKeywords: 'new throw return else',
+ relevance: 0
+ },
+ {
+ className: 'function',
+ begin: '(' + GENERIC_IDENT_RE + '\\s+)+' + hljs.UNDERSCORE_IDENT_RE + '\\s*\\(', returnBegin: true, end: /[{;=]/,
+ excludeEnd: true,
+ keywords: KEYWORDS,
+ contains: [
+ {
+ begin: hljs.UNDERSCORE_IDENT_RE + '\\s*\\(', returnBegin: true,
+ relevance: 0,
+ contains: [hljs.UNDERSCORE_TITLE_MODE]
+ },
+ {
+ className: 'params',
+ begin: /\(/, end: /\)/,
+ keywords: KEYWORDS,
+ relevance: 0,
+ contains: [
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.C_NUMBER_MODE,
+ hljs.C_BLOCK_COMMENT_MODE
+ ]
+ },
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE
+ ]
+ },
+ JAVA_NUMBER_MODE,
+ {
+ className: 'meta', begin: '@[A-Za-z]+'
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("javascript",
+/*
+Language: JavaScript
+Category: common, scripting
+*/
+
+function(hljs) {
+ return {
+ aliases: ['js', 'jsx'],
+ keywords: {
+ keyword:
+ 'in of if for while finally var new function do return void else break catch ' +
+ 'instanceof with throw case default try this switch continue typeof delete ' +
+ 'let yield const export super debugger as async await static ' +
+ // ECMAScript 6 modules import
+ 'import from as'
+ ,
+ literal:
+ 'true false null undefined NaN Infinity',
+ built_in:
+ 'eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent ' +
+ 'encodeURI encodeURIComponent escape unescape Object Function Boolean Error ' +
+ 'EvalError InternalError RangeError ReferenceError StopIteration SyntaxError ' +
+ 'TypeError URIError Number Math Date String RegExp Array Float32Array ' +
+ 'Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array ' +
+ 'Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require ' +
+ 'module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect ' +
+ 'Promise'
+ },
+ contains: [
+ {
+ className: 'meta',
+ relevance: 10,
+ begin: /^\s*['"]use (strict|asm)['"]/
+ },
+ {
+ className: 'meta',
+ begin: /^#!/, end: /$/
+ },
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ { // template string
+ className: 'string',
+ begin: '`', end: '`',
+ contains: [
+ hljs.BACKSLASH_ESCAPE,
+ {
+ className: 'subst',
+ begin: '\\$\\{', end: '\\}'
+ }
+ ]
+ },
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ {
+ className: 'number',
+ variants: [
+ { begin: '\\b(0[bB][01]+)' },
+ { begin: '\\b(0[oO][0-7]+)' },
+ { begin: hljs.C_NUMBER_RE }
+ ],
+ relevance: 0
+ },
+ { // "value" container
+ begin: '(' + hljs.RE_STARTERS_RE + '|\\b(case|return|throw)\\b)\\s*',
+ keywords: 'return throw case',
+ contains: [
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.REGEXP_MODE,
+ { // E4X / JSX
+ begin: /</, end: /(\/\w+|\w+\/)>/,
+ subLanguage: 'xml',
+ contains: [
+ {begin: /<\w+\s*\/>/, skip: true},
+ {begin: /<\w+/, end: /(\/\w+|\w+\/)>/, skip: true, contains: ['self']}
+ ]
+ }
+ ],
+ relevance: 0
+ },
+ {
+ className: 'function',
+ beginKeywords: 'function', end: /\{/, excludeEnd: true,
+ contains: [
+ hljs.inherit(hljs.TITLE_MODE, {begin: /[A-Za-z$_][0-9A-Za-z$_]*/}),
+ {
+ className: 'params',
+ begin: /\(/, end: /\)/,
+ excludeBegin: true,
+ excludeEnd: true,
+ contains: [
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE
+ ]
+ }
+ ],
+ illegal: /\[|%/
+ },
+ {
+ begin: /\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`
+ },
+ hljs.METHOD_GUARD,
+ { // ES6 class
+ className: 'class',
+ beginKeywords: 'class', end: /[{;=]/, excludeEnd: true,
+ illegal: /[:"\[\]]/,
+ contains: [
+ {beginKeywords: 'extends'},
+ hljs.UNDERSCORE_TITLE_MODE
+ ]
+ },
+ {
+ beginKeywords: 'constructor', end: /\{/, excludeEnd: true
+ }
+ ],
+ illegal: /#(?!!)/
+ };
+});
+
+hljs.registerLanguage("json",
+/*
+Language: JSON
+Author: Ivan Sagalaev <maniac@softwaremaniacs.org>
+Category: common, protocols
+*/
+
+function(hljs) {
+ var LITERALS = {literal: 'true false null'};
+ var TYPES = [
+ hljs.QUOTE_STRING_MODE,
+ hljs.C_NUMBER_MODE
+ ];
+ var VALUE_CONTAINER = {
+ end: ',', endsWithParent: true, excludeEnd: true,
+ contains: TYPES,
+ keywords: LITERALS
+ };
+ var OBJECT = {
+ begin: '{', end: '}',
+ contains: [
+ {
+ className: 'attr',
+ begin: /"/, end: /"/,
+ contains: [hljs.BACKSLASH_ESCAPE],
+ illegal: '\\n',
+ },
+ hljs.inherit(VALUE_CONTAINER, {begin: /:/})
+ ],
+ illegal: '\\S'
+ };
+ var ARRAY = {
+ begin: '\\[', end: '\\]',
+ contains: [hljs.inherit(VALUE_CONTAINER)], // inherit is a workaround for a bug that makes shared modes with endsWithParent compile only the ending of one of the parents
+ illegal: '\\S'
+ };
+ TYPES.splice(TYPES.length, 0, OBJECT, ARRAY);
+ return {
+ contains: TYPES,
+ keywords: LITERALS,
+ illegal: '\\S'
+ };
+});
+
+hljs.registerLanguage("julia",
+/*
+Language: Julia
+Author: Kenta Sato <bicycle1885@gmail.com>
+*/
+
+function(hljs) {
+ // Since there are numerous special names in Julia, it is too much trouble
+ // to maintain them by hand. Hence these names (i.e. keywords, literals and
+ // built-ins) are automatically generated from Julia (v0.3.0 and v0.4.1)
+ // itself through following scripts for each.
+
+ var KEYWORDS = {
+ // # keyword generator
+ // println("in")
+ // for kw in Base.REPLCompletions.complete_keyword("")
+ // println(kw)
+ // end
+ keyword:
+ 'in abstract baremodule begin bitstype break catch ccall const continue do else elseif end export ' +
+ 'finally for function global if immutable import importall let local macro module quote return try type ' +
+ 'typealias using while',
+
+ // # literal generator
+ // println("true")
+ // println("false")
+ // for name in Base.REPLCompletions.completions("", 0)[1]
+ // try
+ // s = symbol(name)
+ // v = eval(s)
+ // if !isa(v, Function) &&
+ // !isa(v, DataType) &&
+ // !isa(v, IntrinsicFunction) &&
+ // !issubtype(typeof(v), Tuple) &&
+ // !isa(v, Union) &&
+ // !isa(v, Module) &&
+ // !isa(v, TypeConstructor) &&
+ // !isa(v, TypeVar) &&
+ // !isa(v, Colon)
+ // println(name)
+ // end
+ // end
+ // end
+ literal:
+ // v0.3
+ 'true false ARGS CPU_CORES C_NULL DL_LOAD_PATH DevNull ENDIAN_BOM ENV I|0 Inf Inf16 Inf32 ' +
+ 'InsertionSort JULIA_HOME LOAD_PATH MS_ASYNC MS_INVALIDATE MS_SYNC MergeSort NaN NaN16 NaN32 OS_NAME QuickSort ' +
+ 'RTLD_DEEPBIND RTLD_FIRST RTLD_GLOBAL RTLD_LAZY RTLD_LOCAL RTLD_NODELETE RTLD_NOLOAD RTLD_NOW RoundDown ' +
+ 'RoundFromZero RoundNearest RoundToZero RoundUp STDERR STDIN STDOUT VERSION WORD_SIZE catalan cglobal e|0 eu|0 ' +
+ 'eulergamma golden im nothing pi γ π φ ' +
+ // v0.4 (diff)
+ 'Inf64 NaN64 RoundNearestTiesAway RoundNearestTiesUp ',
+
+ // # built_in generator:
+ // for name in Base.REPLCompletions.completions("", 0)[1]
+ // try
+ // v = eval(symbol(name))
+ // if isa(v, DataType) || isa(v, TypeConstructor) || isa(v, TypeVar)
+ // println(name)
+ // end
+ // end
+ // end
+ built_in:
+ // v0.3
+ 'ANY ASCIIString AbstractArray AbstractRNG AbstractSparseArray Any ArgumentError Array Associative Base64Pipe ' +
+ 'Bidiagonal BigFloat BigInt BitArray BitMatrix BitVector Bool BoundsError Box CFILE Cchar Cdouble Cfloat Char ' +
+ 'CharString Cint Clong Clonglong ClusterManager Cmd Coff_t Colon Complex Complex128 Complex32 Complex64 ' +
+ 'Condition Cptrdiff_t Cshort Csize_t Cssize_t Cuchar Cuint Culong Culonglong Cushort Cwchar_t DArray DataType ' +
+ 'DenseArray Diagonal Dict DimensionMismatch DirectIndexString Display DivideError DomainError EOFError ' +
+ 'EachLine Enumerate ErrorException Exception Expr Factorization FileMonitor FileOffset Filter Float16 Float32 ' +
+ 'Float64 FloatRange FloatingPoint Function GetfieldNode GotoNode Hermitian IO IOBuffer IOStream IPv4 IPv6 ' +
+ 'InexactError Int Int128 Int16 Int32 Int64 Int8 IntSet Integer InterruptException IntrinsicFunction KeyError ' +
+ 'LabelNode LambdaStaticData LineNumberNode LoadError LocalProcess MIME MathConst MemoryError MersenneTwister ' +
+ 'Method MethodError MethodTable Module NTuple NewvarNode Nothing Number ObjectIdDict OrdinalRange ' +
+ 'OverflowError ParseError PollingFileWatcher ProcessExitedException ProcessGroup Ptr QuoteNode Range Range1 ' +
+ 'Ranges Rational RawFD Real Regex RegexMatch RemoteRef RepString RevString RopeString RoundingMode Set ' +
+ 'SharedArray Signed SparseMatrixCSC StackOverflowError Stat StatStruct StepRange String SubArray SubString ' +
+ 'SymTridiagonal Symbol SymbolNode Symmetric SystemError Task TextDisplay Timer TmStruct TopNode Triangular ' +
+ 'Tridiagonal Type TypeConstructor TypeError TypeName TypeVar UTF16String UTF32String UTF8String UdpSocket ' +
+ 'Uint Uint128 Uint16 Uint32 Uint64 Uint8 UndefRefError UndefVarError UniformScaling UnionType UnitRange ' +
+ 'Unsigned Vararg VersionNumber WString WeakKeyDict WeakRef Woodbury Zip ' +
+ // v0.4 (diff)
+ 'AbstractChannel AbstractFloat AbstractString AssertionError Base64DecodePipe Base64EncodePipe BufferStream ' +
+ 'CapturedException CartesianIndex CartesianRange Channel Cintmax_t CompositeException Cstring Cuintmax_t ' +
+ 'Cwstring Date DateTime Dims Enum GenSym GlobalRef HTML InitError InvalidStateException Irrational LinSpace ' +
+ 'LowerTriangular NullException Nullable OutOfMemoryError Pair PartialQuickSort Pipe RandomDevice ' +
+ 'ReadOnlyMemoryError ReentrantLock Ref RemoteException SegmentationFault SerializationState SimpleVector ' +
+ 'TCPSocket Text Tuple UDPSocket UInt UInt128 UInt16 UInt32 UInt64 UInt8 UnicodeError Union UpperTriangular ' +
+ 'Val Void WorkerConfig AbstractMatrix AbstractSparseMatrix AbstractSparseVector AbstractVecOrMat AbstractVector ' +
+ 'DenseMatrix DenseVecOrMat DenseVector Matrix SharedMatrix SharedVector StridedArray StridedMatrix ' +
+ 'StridedVecOrMat StridedVector VecOrMat Vector '
+ };
+
+ // ref: http://julia.readthedocs.org/en/latest/manual/variables/#allowed-variable-names
+ var VARIABLE_NAME_RE = '[A-Za-z_\\u00A1-\\uFFFF][A-Za-z_0-9\\u00A1-\\uFFFF]*';
+
+ // placeholder for recursive self-reference
+ var DEFAULT = { lexemes: VARIABLE_NAME_RE, keywords: KEYWORDS, illegal: /<\// };
+
+ var TYPE_ANNOTATION = {
+ className: 'type',
+ begin: /::/
+ };
+
+ var SUBTYPE = {
+ className: 'type',
+ begin: /<:/
+ };
+
+ // ref: http://julia.readthedocs.org/en/latest/manual/integers-and-floating-point-numbers/
+ var NUMBER = {
+ className: 'number',
+ // supported numeric literals:
+ // * binary literal (e.g. 0x10)
+ // * octal literal (e.g. 0o76543210)
+ // * hexadecimal literal (e.g. 0xfedcba876543210)
+ // * hexadecimal floating point literal (e.g. 0x1p0, 0x1.2p2)
+ // * decimal literal (e.g. 9876543210, 100_000_000)
+ // * floating pointe literal (e.g. 1.2, 1.2f, .2, 1., 1.2e10, 1.2e-10)
+ begin: /(\b0x[\d_]*(\.[\d_]*)?|0x\.\d[\d_]*)p[-+]?\d+|\b0[box][a-fA-F0-9][a-fA-F0-9_]*|(\b\d[\d_]*(\.[\d_]*)?|\.\d[\d_]*)([eEfF][-+]?\d+)?/,
+ relevance: 0
+ };
+
+ var CHAR = {
+ className: 'string',
+ begin: /'(.|\\[xXuU][a-zA-Z0-9]+)'/
+ };
+
+ var INTERPOLATION = {
+ className: 'subst',
+ begin: /\$\(/, end: /\)/,
+ keywords: KEYWORDS
+ };
+
+ var INTERPOLATED_VARIABLE = {
+ className: 'variable',
+ begin: '\\$' + VARIABLE_NAME_RE
+ };
+
+ // TODO: neatly escape normal code in string literal
+ var STRING = {
+ className: 'string',
+ contains: [hljs.BACKSLASH_ESCAPE, INTERPOLATION, INTERPOLATED_VARIABLE],
+ variants: [
+ { begin: /\w*"""/, end: /"""\w*/, relevance: 10 },
+ { begin: /\w*"/, end: /"\w*/ }
+ ]
+ };
+
+ var COMMAND = {
+ className: 'string',
+ contains: [hljs.BACKSLASH_ESCAPE, INTERPOLATION, INTERPOLATED_VARIABLE],
+ begin: '`', end: '`'
+ };
+
+ var MACROCALL = {
+ className: 'meta',
+ begin: '@' + VARIABLE_NAME_RE
+ };
+
+ var COMMENT = {
+ className: 'comment',
+ variants: [
+ { begin: '#=', end: '=#', relevance: 10 },
+ { begin: '#', end: '$' }
+ ]
+ };
+
+ DEFAULT.contains = [
+ NUMBER,
+ CHAR,
+ TYPE_ANNOTATION,
+ SUBTYPE,
+ STRING,
+ COMMAND,
+ MACROCALL,
+ COMMENT,
+ hljs.HASH_COMMENT_MODE
+ ];
+ INTERPOLATION.contains = DEFAULT.contains;
+
+ return DEFAULT;
+});
+
+hljs.registerLanguage("kotlin",
+/*
+ Language: Kotlin
+ Author: Sergey Mashkov <cy6erGn0m@gmail.com>
+ */
+
+
+function (hljs) {
+ var KEYWORDS = {
+ keyword:
+ 'abstract as val var vararg get set class object open private protected public noinline ' +
+ 'crossinline dynamic final enum if else do while for when throw try catch finally ' +
+ 'import package is in fun override companion reified inline ' +
+ 'interface annotation data sealed internal infix operator out by constructor super ' +
+ // to be deleted soon
+ 'trait volatile transient native default',
+ built_in:
+ 'Byte Short Char Int Long Boolean Float Double Void Unit Nothing',
+ literal:
+ 'true false null'
+ };
+ var KEYWORDS_WITH_LABEL = {
+ className: 'keyword',
+ begin: /\b(break|continue|return|this)\b/,
+ starts: {
+ contains: [
+ {
+ className: 'symbol',
+ begin: /@\w+/
+ }
+ ]
+ }
+ };
+ var LABEL = {
+ className: 'symbol', begin: hljs.UNDERSCORE_IDENT_RE + '@'
+ };
+
+ // for string templates
+ var SUBST = {
+ className: 'subst',
+ variants: [
+ {begin: '\\$' + hljs.UNDERSCORE_IDENT_RE},
+ {begin: '\\${', end: '}', contains: [hljs.APOS_STRING_MODE, hljs.C_NUMBER_MODE]}
+ ]
+ };
+ var STRING = {
+ className: 'string',
+ variants: [
+ {
+ begin: '"""', end: '"""',
+ contains: [SUBST]
+ },
+ // Can't use built-in modes easily, as we want to use STRING in the meta
+ // context as 'meta-string' and there's no syntax to remove explicitly set
+ // classNames in built-in modes.
+ {
+ begin: '\'', end: '\'',
+ illegal: /\n/,
+ contains: [hljs.BACKSLASH_ESCAPE]
+ },
+ {
+ begin: '"', end: '"',
+ illegal: /\n/,
+ contains: [hljs.BACKSLASH_ESCAPE, SUBST]
+ }
+ ]
+ };
+
+ var ANNOTATION_USE_SITE = {
+ className: 'meta', begin: '@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*' + hljs.UNDERSCORE_IDENT_RE + ')?'
+ };
+ var ANNOTATION = {
+ className: 'meta', begin: '@' + hljs.UNDERSCORE_IDENT_RE,
+ contains: [
+ {
+ begin: /\(/, end: /\)/,
+ contains: [
+ hljs.inherit(STRING, {className: 'meta-string'})
+ ]
+ }
+ ]
+ };
+
+ return {
+ keywords: KEYWORDS,
+ contains : [
+ hljs.COMMENT(
+ '/\\*\\*',
+ '\\*/',
+ {
+ relevance : 0,
+ contains : [{
+ className : 'doctag',
+ begin : '@[A-Za-z]+'
+ }]
+ }
+ ),
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ KEYWORDS_WITH_LABEL,
+ LABEL,
+ ANNOTATION_USE_SITE,
+ ANNOTATION,
+ {
+ className: 'function',
+ beginKeywords: 'fun', end: '[(]|$',
+ returnBegin: true,
+ excludeEnd: true,
+ keywords: KEYWORDS,
+ illegal: /fun\s+(<.*>)?[^\s\(]+(\s+[^\s\(]+)\s*=/,
+ relevance: 5,
+ contains: [
+ {
+ begin: hljs.UNDERSCORE_IDENT_RE + '\\s*\\(', returnBegin: true,
+ relevance: 0,
+ contains: [hljs.UNDERSCORE_TITLE_MODE]
+ },
+ {
+ className: 'type',
+ begin: /</, end: />/, keywords: 'reified',
+ relevance: 0
+ },
+ {
+ className: 'params',
+ begin: /\(/, end: /\)/,
+ endsParent: true,
+ keywords: KEYWORDS,
+ relevance: 0,
+ contains: [
+ {
+ begin: /:/, end: /[=,\/]/, endsWithParent: true,
+ contains: [
+ {className: 'type', begin: hljs.UNDERSCORE_IDENT_RE},
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE
+ ],
+ relevance: 0
+ },
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ ANNOTATION_USE_SITE,
+ ANNOTATION,
+ STRING,
+ hljs.C_NUMBER_MODE
+ ]
+ },
+ hljs.C_BLOCK_COMMENT_MODE
+ ]
+ },
+ {
+ className: 'class',
+ beginKeywords: 'class interface trait', end: /[:\{(]|$/, // remove 'trait' when removed from KEYWORDS
+ excludeEnd: true,
+ illegal: 'extends implements',
+ contains: [
+ {beginKeywords: 'public protected internal private constructor'},
+ hljs.UNDERSCORE_TITLE_MODE,
+ {
+ className: 'type',
+ begin: /</, end: />/, excludeBegin: true, excludeEnd: true,
+ relevance: 0
+ },
+ {
+ className: 'type',
+ begin: /[,:]\s*/, end: /[<\(,]|$/, excludeBegin: true, returnEnd: true
+ },
+ ANNOTATION_USE_SITE,
+ ANNOTATION
+ ]
+ },
+ STRING,
+ {
+ className: 'meta',
+ begin: "^#!/usr/bin/env", end: '$',
+ illegal: '\n'
+ },
+ hljs.C_NUMBER_MODE
+ ]
+ };
+});
+
+hljs.registerLanguage("lasso",
+/*
+Language: Lasso
+Author: Eric Knibbe <eric@lassosoft.com>
+Description: Lasso is a language and server platform for database-driven web applications. This definition handles Lasso 9 syntax and LassoScript for Lasso 8.6 and earlier.
+*/
+
+function(hljs) {
+ var LASSO_IDENT_RE = '[a-zA-Z_][a-zA-Z0-9_.]*';
+ var LASSO_ANGLE_RE = '<\\?(lasso(script)?|=)';
+ var LASSO_CLOSE_RE = '\\]|\\?>';
+ var LASSO_KEYWORDS = {
+ literal:
+ 'true false none minimal full all void ' +
+ 'bw nbw ew new cn ncn lt lte gt gte eq neq rx nrx ft',
+ built_in:
+ 'array date decimal duration integer map pair string tag xml null ' +
+ 'boolean bytes keyword list locale queue set stack staticarray ' +
+ 'local var variable global data self inherited currentcapture givenblock',
+ keyword:
+ 'error_code error_msg error_pop error_push error_reset cache ' +
+ 'database_names database_schemanames database_tablenames define_tag ' +
+ 'define_type email_batch encode_set html_comment handle handle_error ' +
+ 'header if inline iterate ljax_target link link_currentaction ' +
+ 'link_currentgroup link_currentrecord link_detail link_firstgroup ' +
+ 'link_firstrecord link_lastgroup link_lastrecord link_nextgroup ' +
+ 'link_nextrecord link_prevgroup link_prevrecord log loop ' +
+ 'namespace_using output_none portal private protect records referer ' +
+ 'referrer repeating resultset rows search_args search_arguments ' +
+ 'select sort_args sort_arguments thread_atomic value_list while ' +
+ 'abort case else if_empty if_false if_null if_true loop_abort ' +
+ 'loop_continue loop_count params params_up return return_value ' +
+ 'run_children soap_definetag soap_lastrequest soap_lastresponse ' +
+ 'tag_name ascending average by define descending do equals ' +
+ 'frozen group handle_failure import in into join let match max ' +
+ 'min on order parent protected provide public require returnhome ' +
+ 'skip split_thread sum take thread to trait type where with ' +
+ 'yield yieldhome and or not'
+ };
+ var HTML_COMMENT = hljs.COMMENT(
+ '<!--',
+ '-->',
+ {
+ relevance: 0
+ }
+ );
+ var LASSO_NOPROCESS = {
+ className: 'meta',
+ begin: '\\[noprocess\\]',
+ starts: {
+ end: '\\[/noprocess\\]',
+ returnEnd: true,
+ contains: [HTML_COMMENT]
+ }
+ };
+ var LASSO_START = {
+ className: 'meta',
+ begin: '\\[/noprocess|' + LASSO_ANGLE_RE
+ };
+ var LASSO_DATAMEMBER = {
+ className: 'symbol',
+ begin: '\'' + LASSO_IDENT_RE + '\''
+ };
+ var LASSO_CODE = [
+ hljs.COMMENT(
+ '/\\*\\*!',
+ '\\*/'
+ ),
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.inherit(hljs.C_NUMBER_MODE, {begin: hljs.C_NUMBER_RE + '|(infinity|nan)\\b'}),
+ hljs.inherit(hljs.APOS_STRING_MODE, {illegal: null}),
+ hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null}),
+ {
+ className: 'string',
+ begin: '`', end: '`'
+ },
+ { // variables
+ variants: [
+ {
+ begin: '[#$]' + LASSO_IDENT_RE
+ },
+ {
+ begin: '#', end: '\\d+',
+ illegal: '\\W'
+ }
+ ]
+ },
+ {
+ className: 'type',
+ begin: '::\\s*', end: LASSO_IDENT_RE,
+ illegal: '\\W'
+ },
+ {
+ className: 'attr',
+ variants: [
+ {
+ begin: '-(?!infinity)' + hljs.UNDERSCORE_IDENT_RE,
+ relevance: 0
+ },
+ {
+ begin: '(\\.\\.\\.)'
+ }
+ ]
+ },
+ {
+ begin: /(->|\.\.?)\s*/,
+ relevance: 0,
+ contains: [LASSO_DATAMEMBER]
+ },
+ {
+ className: 'class',
+ beginKeywords: 'define',
+ returnEnd: true, end: '\\(|=>',
+ contains: [
+ hljs.inherit(hljs.TITLE_MODE, {begin: hljs.UNDERSCORE_IDENT_RE + '(=(?!>))?'})
+ ]
+ }
+ ];
+ return {
+ aliases: ['ls', 'lassoscript'],
+ case_insensitive: true,
+ lexemes: LASSO_IDENT_RE + '|&[lg]t;',
+ keywords: LASSO_KEYWORDS,
+ contains: [
+ {
+ className: 'meta',
+ begin: LASSO_CLOSE_RE,
+ relevance: 0,
+ starts: { // markup
+ end: '\\[|' + LASSO_ANGLE_RE,
+ returnEnd: true,
+ relevance: 0,
+ contains: [HTML_COMMENT]
+ }
+ },
+ LASSO_NOPROCESS,
+ LASSO_START,
+ {
+ className: 'meta',
+ begin: '\\[no_square_brackets',
+ starts: {
+ end: '\\[/no_square_brackets\\]', // not implemented in the language
+ lexemes: LASSO_IDENT_RE + '|&[lg]t;',
+ keywords: LASSO_KEYWORDS,
+ contains: [
+ {
+ className: 'meta',
+ begin: LASSO_CLOSE_RE,
+ relevance: 0,
+ starts: {
+ end: '\\[noprocess\\]|' + LASSO_ANGLE_RE,
+ returnEnd: true,
+ contains: [HTML_COMMENT]
+ }
+ },
+ LASSO_NOPROCESS,
+ LASSO_START
+ ].concat(LASSO_CODE)
+ }
+ },
+ {
+ className: 'meta',
+ begin: '\\[',
+ relevance: 0
+ },
+ {
+ className: 'meta',
+ begin: '^#!.+lasso9\\b',
+ relevance: 10
+ }
+ ].concat(LASSO_CODE)
+ };
+});
+
+hljs.registerLanguage("ldif",
+/*
+Language: LDIF
+Contributors: Jacob Childress <jacobc@gmail.com>
+Category: enterprise, config
+*/
+function(hljs) {
+ return {
+ contains: [
+ {
+ className: 'attribute',
+ begin: '^dn', end: ': ', excludeEnd: true,
+ starts: {end: '$', relevance: 0},
+ relevance: 10
+ },
+ {
+ className: 'attribute',
+ begin: '^\\w', end: ': ', excludeEnd: true,
+ starts: {end: '$', relevance: 0}
+ },
+ {
+ className: 'literal',
+ begin: '^-', end: '$'
+ },
+ hljs.HASH_COMMENT_MODE
+ ]
+ };
+});
+
+hljs.registerLanguage("less",
+/*
+Language: Less
+Author: Max Mikhailov <seven.phases.max@gmail.com>
+Category: css
+*/
+
+function(hljs) {
+ var IDENT_RE = '[\\w-]+'; // yes, Less identifiers may begin with a digit
+ var INTERP_IDENT_RE = '(' + IDENT_RE + '|@{' + IDENT_RE + '})';
+
+ /* Generic Modes */
+
+ var RULES = [], VALUE = []; // forward def. for recursive modes
+
+ var STRING_MODE = function(c) { return {
+ // Less strings are not multiline (also include '~' for more consistent coloring of "escaped" strings)
+ className: 'string', begin: '~?' + c + '.*?' + c
+ };};
+
+ var IDENT_MODE = function(name, begin, relevance) { return {
+ className: name, begin: begin, relevance: relevance
+ };};
+
+ var PARENS_MODE = {
+ // used only to properly balance nested parens inside mixin call, def. arg list
+ begin: '\\(', end: '\\)', contains: VALUE, relevance: 0
+ };
+
+ // generic Less highlighter (used almost everywhere except selectors):
+ VALUE.push(
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ STRING_MODE("'"),
+ STRING_MODE('"'),
+ hljs.CSS_NUMBER_MODE, // fixme: it does not include dot for numbers like .5em :(
+ {
+ begin: '(url|data-uri)\\(',
+ starts: {className: 'string', end: '[\\)\\n]', excludeEnd: true}
+ },
+ IDENT_MODE('number', '#[0-9A-Fa-f]+\\b'),
+ PARENS_MODE,
+ IDENT_MODE('variable', '@@?' + IDENT_RE, 10),
+ IDENT_MODE('variable', '@{' + IDENT_RE + '}'),
+ IDENT_MODE('built_in', '~?`[^`]*?`'), // inline javascript (or whatever host language) *multiline* string
+ { // @media features (it’s here to not duplicate things in AT_RULE_MODE with extra PARENS_MODE overriding):
+ className: 'attribute', begin: IDENT_RE + '\\s*:', end: ':', returnBegin: true, excludeEnd: true
+ },
+ {
+ className: 'meta',
+ begin: '!important'
+ }
+ );
+
+ var VALUE_WITH_RULESETS = VALUE.concat({
+ begin: '{', end: '}', contains: RULES
+ });
+
+ var MIXIN_GUARD_MODE = {
+ beginKeywords: 'when', endsWithParent: true,
+ contains: [{beginKeywords: 'and not'}].concat(VALUE) // using this form to override VALUE’s 'function' match
+ };
+
+ /* Rule-Level Modes */
+
+ var RULE_MODE = {
+ begin: INTERP_IDENT_RE + '\\s*:', returnBegin: true, end: '[;}]',
+ relevance: 0,
+ contains: [
+ {
+ className: 'attribute',
+ begin: INTERP_IDENT_RE, end: ':', excludeEnd: true,
+ starts: {
+ endsWithParent: true, illegal: '[<=$]',
+ relevance: 0,
+ contains: VALUE
+ }
+ }
+ ]
+ };
+
+ var AT_RULE_MODE = {
+ className: 'keyword',
+ begin: '@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b',
+ starts: {end: '[;{}]', returnEnd: true, contains: VALUE, relevance: 0}
+ };
+
+ // variable definitions and calls
+ var VAR_RULE_MODE = {
+ className: 'variable',
+ variants: [
+ // using more strict pattern for higher relevance to increase chances of Less detection.
+ // this is *the only* Less specific statement used in most of the sources, so...
+ // (we’ll still often loose to the css-parser unless there's '//' comment,
+ // simply because 1 variable just can't beat 99 properties :)
+ {begin: '@' + IDENT_RE + '\\s*:', relevance: 15},
+ {begin: '@' + IDENT_RE}
+ ],
+ starts: {end: '[;}]', returnEnd: true, contains: VALUE_WITH_RULESETS}
+ };
+
+ var SELECTOR_MODE = {
+ // first parse unambiguous selectors (i.e. those not starting with tag)
+ // then fall into the scary lookahead-discriminator variant.
+ // this mode also handles mixin definitions and calls
+ variants: [{
+ begin: '[\\.#:&\\[>]', end: '[;{}]' // mixin calls end with ';'
+ }, {
+ begin: INTERP_IDENT_RE + '[^;]*{',
+ end: '{'
+ }],
+ returnBegin: true,
+ returnEnd: true,
+ illegal: '[<=\'$"]',
+ contains: [
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ MIXIN_GUARD_MODE,
+ IDENT_MODE('keyword', 'all\\b'),
+ IDENT_MODE('variable', '@{' + IDENT_RE + '}'), // otherwise it’s identified as tag
+ IDENT_MODE('selector-tag', INTERP_IDENT_RE + '%?', 0), // '%' for more consistent coloring of @keyframes "tags"
+ IDENT_MODE('selector-id', '#' + INTERP_IDENT_RE),
+ IDENT_MODE('selector-class', '\\.' + INTERP_IDENT_RE, 0),
+ IDENT_MODE('selector-tag', '&', 0),
+ {className: 'selector-attr', begin: '\\[', end: '\\]'},
+ {className: 'selector-pseudo', begin: /:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},
+ {begin: '\\(', end: '\\)', contains: VALUE_WITH_RULESETS}, // argument list of parametric mixins
+ {begin: '!important'} // eat !important after mixin call or it will be colored as tag
+ ]
+ };
+
+ RULES.push(
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ AT_RULE_MODE,
+ VAR_RULE_MODE,
+ RULE_MODE,
+ SELECTOR_MODE
+ );
+
+ return {
+ case_insensitive: true,
+ illegal: '[=>\'/<($"]',
+ contains: RULES
+ };
+});
+
+hljs.registerLanguage("lisp",
+/*
+Language: Lisp
+Description: Generic lisp syntax
+Author: Vasily Polovnyov <vast@whiteants.net>
+Category: lisp
+*/
+
+function(hljs) {
+ var LISP_IDENT_RE = '[a-zA-Z_\\-\\+\\*\\/\\<\\=\\>\\&\\#][a-zA-Z0-9_\\-\\+\\*\\/\\<\\=\\>\\&\\#!]*';
+ var MEC_RE = '\\|[^]*?\\|';
+ var LISP_SIMPLE_NUMBER_RE = '(\\-|\\+)?\\d+(\\.\\d+|\\/\\d+)?((d|e|f|l|s|D|E|F|L|S)(\\+|\\-)?\\d+)?';
+ var SHEBANG = {
+ className: 'meta',
+ begin: '^#!', end: '$'
+ };
+ var LITERAL = {
+ className: 'literal',
+ begin: '\\b(t{1}|nil)\\b'
+ };
+ var NUMBER = {
+ className: 'number',
+ variants: [
+ {begin: LISP_SIMPLE_NUMBER_RE, relevance: 0},
+ {begin: '#(b|B)[0-1]+(/[0-1]+)?'},
+ {begin: '#(o|O)[0-7]+(/[0-7]+)?'},
+ {begin: '#(x|X)[0-9a-fA-F]+(/[0-9a-fA-F]+)?'},
+ {begin: '#(c|C)\\(' + LISP_SIMPLE_NUMBER_RE + ' +' + LISP_SIMPLE_NUMBER_RE, end: '\\)'}
+ ]
+ };
+ var STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null});
+ var COMMENT = hljs.COMMENT(
+ ';', '$',
+ {
+ relevance: 0
+ }
+ );
+ var VARIABLE = {
+ begin: '\\*', end: '\\*'
+ };
+ var KEYWORD = {
+ className: 'symbol',
+ begin: '[:&]' + LISP_IDENT_RE
+ };
+ var IDENT = {
+ begin: LISP_IDENT_RE,
+ relevance: 0
+ };
+ var MEC = {
+ begin: MEC_RE
+ };
+ var QUOTED_LIST = {
+ begin: '\\(', end: '\\)',
+ contains: ['self', LITERAL, STRING, NUMBER, IDENT]
+ };
+ var QUOTED = {
+ contains: [NUMBER, STRING, VARIABLE, KEYWORD, QUOTED_LIST, IDENT],
+ variants: [
+ {
+ begin: '[\'`]\\(', end: '\\)'
+ },
+ {
+ begin: '\\(quote ', end: '\\)',
+ keywords: {name: 'quote'}
+ },
+ {
+ begin: '\'' + MEC_RE
+ }
+ ]
+ };
+ var QUOTED_ATOM = {
+ variants: [
+ {begin: '\'' + LISP_IDENT_RE},
+ {begin: '#\'' + LISP_IDENT_RE + '(::' + LISP_IDENT_RE + ')*'}
+ ]
+ };
+ var LIST = {
+ begin: '\\(\\s*', end: '\\)'
+ };
+ var BODY = {
+ endsWithParent: true,
+ relevance: 0
+ };
+ LIST.contains = [
+ {
+ className: 'name',
+ variants: [
+ {begin: LISP_IDENT_RE},
+ {begin: MEC_RE}
+ ]
+ },
+ BODY
+ ];
+ BODY.contains = [QUOTED, QUOTED_ATOM, LIST, LITERAL, NUMBER, STRING, COMMENT, VARIABLE, KEYWORD, MEC, IDENT];
+
+ return {
+ illegal: /\S/,
+ contains: [
+ NUMBER,
+ SHEBANG,
+ LITERAL,
+ STRING,
+ COMMENT,
+ QUOTED,
+ QUOTED_ATOM,
+ LIST,
+ IDENT
+ ]
+ };
+});
+
+hljs.registerLanguage("livecodeserver",
+/*
+Language: LiveCode
+Author: Ralf Bitter <rabit@revigniter.com>
+Description: Language definition for LiveCode server accounting for revIgniter (a web application framework) characteristics.
+Version: 1.0a
+Date: 2013-06-03
+Category: enterprise
+*/
+
+function(hljs) {
+ var VARIABLE = {
+ begin: '\\b[gtps][A-Z]+[A-Za-z0-9_\\-]*\\b|\\$_[A-Z]+',
+ relevance: 0
+ };
+ var COMMENT_MODES = [
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.HASH_COMMENT_MODE,
+ hljs.COMMENT('--', '$'),
+ hljs.COMMENT('[^:]//', '$')
+ ];
+ var TITLE1 = hljs.inherit(hljs.TITLE_MODE, {
+ variants: [
+ {begin: '\\b_*rig[A-Z]+[A-Za-z0-9_\\-]*'},
+ {begin: '\\b_[a-z0-9\\-]+'}
+ ]
+ });
+ var TITLE2 = hljs.inherit(hljs.TITLE_MODE, {begin: '\\b([A-Za-z0-9_\\-]+)\\b'});
+ return {
+ case_insensitive: false,
+ keywords: {
+ keyword:
+ '$_COOKIE $_FILES $_GET $_GET_BINARY $_GET_RAW $_POST $_POST_BINARY $_POST_RAW $_SESSION $_SERVER ' +
+ 'codepoint codepoints segment segments codeunit codeunits sentence sentences trueWord trueWords paragraph ' +
+ 'after byte bytes english the until http forever descending using line real8 with seventh ' +
+ 'for stdout finally element word words fourth before black ninth sixth characters chars stderr ' +
+ 'uInt1 uInt1s uInt2 uInt2s stdin string lines relative rel any fifth items from middle mid ' +
+ 'at else of catch then third it file milliseconds seconds second secs sec int1 int1s int4 ' +
+ 'int4s internet int2 int2s normal text item last long detailed effective uInt4 uInt4s repeat ' +
+ 'end repeat URL in try into switch to words https token binfile each tenth as ticks tick ' +
+ 'system real4 by dateItems without char character ascending eighth whole dateTime numeric short ' +
+ 'first ftp integer abbreviated abbr abbrev private case while if ' +
+ 'div mod wrap and or bitAnd bitNot bitOr bitXor among not in a an within ' +
+ 'contains ends with begins the keys of keys',
+ literal:
+ 'SIX TEN FORMFEED NINE ZERO NONE SPACE FOUR FALSE COLON CRLF PI COMMA ENDOFFILE EOF EIGHT FIVE ' +
+ 'QUOTE EMPTY ONE TRUE RETURN CR LINEFEED RIGHT BACKSLASH NULL SEVEN TAB THREE TWO ' +
+ 'six ten formfeed nine zero none space four false colon crlf pi comma endoffile eof eight five ' +
+ 'quote empty one true return cr linefeed right backslash null seven tab three two ' +
+ 'RIVERSION RISTATE FILE_READ_MODE FILE_WRITE_MODE FILE_WRITE_MODE DIR_WRITE_MODE FILE_READ_UMASK ' +
+ 'FILE_WRITE_UMASK DIR_READ_UMASK DIR_WRITE_UMASK',
+ built_in:
+ 'put abs acos aliasReference annuity arrayDecode arrayEncode asin atan atan2 average avg avgDev base64Decode ' +
+ 'base64Encode baseConvert binaryDecode binaryEncode byteOffset byteToNum cachedURL cachedURLs charToNum ' +
+ 'cipherNames codepointOffset codepointProperty codepointToNum codeunitOffset commandNames compound compress ' +
+ 'constantNames cos date dateFormat decompress directories ' +
+ 'diskSpace DNSServers exp exp1 exp2 exp10 extents files flushEvents folders format functionNames geometricMean global ' +
+ 'globals hasMemory harmonicMean hostAddress hostAddressToName hostName hostNameToAddress isNumber ISOToMac itemOffset ' +
+ 'keys len length libURLErrorData libUrlFormData libURLftpCommand libURLLastHTTPHeaders libURLLastRHHeaders ' +
+ 'libUrlMultipartFormAddPart libUrlMultipartFormData libURLVersion lineOffset ln ln1 localNames log log2 log10 ' +
+ 'longFilePath lower macToISO matchChunk matchText matrixMultiply max md5Digest median merge millisec ' +
+ 'millisecs millisecond milliseconds min monthNames nativeCharToNum normalizeText num number numToByte numToChar ' +
+ 'numToCodepoint numToNativeChar offset open openfiles openProcesses openProcessIDs openSockets ' +
+ 'paragraphOffset paramCount param params peerAddress pendingMessages platform popStdDev populationStandardDeviation ' +
+ 'populationVariance popVariance processID random randomBytes replaceText result revCreateXMLTree revCreateXMLTreeFromFile ' +
+ 'revCurrentRecord revCurrentRecordIsFirst revCurrentRecordIsLast revDatabaseColumnCount revDatabaseColumnIsNull ' +
+ 'revDatabaseColumnLengths revDatabaseColumnNames revDatabaseColumnNamed revDatabaseColumnNumbered ' +
+ 'revDatabaseColumnTypes revDatabaseConnectResult revDatabaseCursors revDatabaseID revDatabaseTableNames ' +
+ 'revDatabaseType revDataFromQuery revdb_closeCursor revdb_columnbynumber revdb_columncount revdb_columnisnull ' +
+ 'revdb_columnlengths revdb_columnnames revdb_columntypes revdb_commit revdb_connect revdb_connections ' +
+ 'revdb_connectionerr revdb_currentrecord revdb_cursorconnection revdb_cursorerr revdb_cursors revdb_dbtype ' +
+ 'revdb_disconnect revdb_execute revdb_iseof revdb_isbof revdb_movefirst revdb_movelast revdb_movenext ' +
+ 'revdb_moveprev revdb_query revdb_querylist revdb_recordcount revdb_rollback revdb_tablenames ' +
+ 'revGetDatabaseDriverPath revNumberOfRecords revOpenDatabase revOpenDatabases revQueryDatabase ' +
+ 'revQueryDatabaseBlob revQueryResult revQueryIsAtStart revQueryIsAtEnd revUnixFromMacPath revXMLAttribute ' +
+ 'revXMLAttributes revXMLAttributeValues revXMLChildContents revXMLChildNames revXMLCreateTreeFromFileWithNamespaces ' +
+ 'revXMLCreateTreeWithNamespaces revXMLDataFromXPathQuery revXMLEvaluateXPath revXMLFirstChild revXMLMatchingNode ' +
+ 'revXMLNextSibling revXMLNodeContents revXMLNumberOfChildren revXMLParent revXMLPreviousSibling ' +
+ 'revXMLRootNode revXMLRPC_CreateRequest revXMLRPC_Documents revXMLRPC_Error ' +
+ 'revXMLRPC_GetHost revXMLRPC_GetMethod revXMLRPC_GetParam revXMLText revXMLRPC_Execute ' +
+ 'revXMLRPC_GetParamCount revXMLRPC_GetParamNode revXMLRPC_GetParamType revXMLRPC_GetPath revXMLRPC_GetPort ' +
+ 'revXMLRPC_GetProtocol revXMLRPC_GetRequest revXMLRPC_GetResponse revXMLRPC_GetSocket revXMLTree ' +
+ 'revXMLTrees revXMLValidateDTD revZipDescribeItem revZipEnumerateItems revZipOpenArchives round sampVariance ' +
+ 'sec secs seconds sentenceOffset sha1Digest shell shortFilePath sin specialFolderPath sqrt standardDeviation statRound ' +
+ 'stdDev sum sysError systemVersion tan tempName textDecode textEncode tick ticks time to tokenOffset toLower toUpper ' +
+ 'transpose truewordOffset trunc uniDecode uniEncode upper URLDecode URLEncode URLStatus uuid value variableNames ' +
+ 'variance version waitDepth weekdayNames wordOffset xsltApplyStylesheet xsltApplyStylesheetFromFile xsltLoadStylesheet ' +
+ 'xsltLoadStylesheetFromFile add breakpoint cancel clear local variable file word line folder directory URL close socket process ' +
+ 'combine constant convert create new alias folder directory decrypt delete variable word line folder ' +
+ 'directory URL dispatch divide do encrypt filter get include intersect kill libURLDownloadToFile ' +
+ 'libURLFollowHttpRedirects libURLftpUpload libURLftpUploadFile libURLresetAll libUrlSetAuthCallback ' +
+ 'libURLSetCustomHTTPHeaders libUrlSetExpect100 libURLSetFTPListCommand libURLSetFTPMode libURLSetFTPStopTime ' +
+ 'libURLSetStatusCallback load multiply socket prepare process post seek rel relative read from process rename ' +
+ 'replace require resetAll resolve revAddXMLNode revAppendXML revCloseCursor revCloseDatabase revCommitDatabase ' +
+ 'revCopyFile revCopyFolder revCopyXMLNode revDeleteFolder revDeleteXMLNode revDeleteAllXMLTrees ' +
+ 'revDeleteXMLTree revExecuteSQL revGoURL revInsertXMLNode revMoveFolder revMoveToFirstRecord revMoveToLastRecord ' +
+ 'revMoveToNextRecord revMoveToPreviousRecord revMoveToRecord revMoveXMLNode revPutIntoXMLNode revRollBackDatabase ' +
+ 'revSetDatabaseDriverPath revSetXMLAttribute revXMLRPC_AddParam revXMLRPC_DeleteAllDocuments revXMLAddDTD ' +
+ 'revXMLRPC_Free revXMLRPC_FreeAll revXMLRPC_DeleteDocument revXMLRPC_DeleteParam revXMLRPC_SetHost ' +
+ 'revXMLRPC_SetMethod revXMLRPC_SetPort revXMLRPC_SetProtocol revXMLRPC_SetSocket revZipAddItemWithData ' +
+ 'revZipAddItemWithFile revZipAddUncompressedItemWithData revZipAddUncompressedItemWithFile revZipCancel ' +
+ 'revZipCloseArchive revZipDeleteItem revZipExtractItemToFile revZipExtractItemToVariable revZipSetProgressCallback ' +
+ 'revZipRenameItem revZipReplaceItemWithData revZipReplaceItemWithFile revZipOpenArchive send set sort split start stop ' +
+ 'subtract union unload wait write'
+ },
+ contains: [
+ VARIABLE,
+ {
+ className: 'keyword',
+ begin: '\\bend\\sif\\b'
+ },
+ {
+ className: 'function',
+ beginKeywords: 'function', end: '$',
+ contains: [
+ VARIABLE,
+ TITLE2,
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.BINARY_NUMBER_MODE,
+ hljs.C_NUMBER_MODE,
+ TITLE1
+ ]
+ },
+ {
+ className: 'function',
+ begin: '\\bend\\s+', end: '$',
+ keywords: 'end',
+ contains: [
+ TITLE2,
+ TITLE1
+ ],
+ relevance: 0
+ },
+ {
+ beginKeywords: 'command on', end: '$',
+ contains: [
+ VARIABLE,
+ TITLE2,
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.BINARY_NUMBER_MODE,
+ hljs.C_NUMBER_MODE,
+ TITLE1
+ ]
+ },
+ {
+ className: 'meta',
+ variants: [
+ {
+ begin: '<\\?(rev|lc|livecode)',
+ relevance: 10
+ },
+ { begin: '<\\?' },
+ { begin: '\\?>' }
+ ]
+ },
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.BINARY_NUMBER_MODE,
+ hljs.C_NUMBER_MODE,
+ TITLE1
+ ].concat(COMMENT_MODES),
+ illegal: ';$|^\\[|^=|&|{'
+ };
+});
+
+hljs.registerLanguage("livescript",
+/*
+Language: LiveScript
+Author: Taneli Vatanen <taneli.vatanen@gmail.com>
+Contributors: Jen Evers-Corvina <jen@sevvie.net>
+Origin: coffeescript.js
+Description: LiveScript is a programming language that transcompiles to JavaScript. For info about language see http://livescript.net/
+Category: scripting
+*/
+
+function(hljs) {
+ var KEYWORDS = {
+ keyword:
+ // JS keywords
+ 'in if for while finally new do return else break catch instanceof throw try this ' +
+ 'switch continue typeof delete debugger case default function var with ' +
+ // LiveScript keywords
+ 'then unless until loop of by when and or is isnt not it that otherwise from to til fallthrough super ' +
+ 'case default function var void const let enum export import native ' +
+ '__hasProp __extends __slice __bind __indexOf',
+ literal:
+ // JS literals
+ 'true false null undefined ' +
+ // LiveScript literals
+ 'yes no on off it that void',
+ built_in:
+ 'npm require console print module global window document'
+ };
+ var JS_IDENT_RE = '[A-Za-z$_](?:\-[0-9A-Za-z$_]|[0-9A-Za-z$_])*';
+ var TITLE = hljs.inherit(hljs.TITLE_MODE, {begin: JS_IDENT_RE});
+ var SUBST = {
+ className: 'subst',
+ begin: /#\{/, end: /}/,
+ keywords: KEYWORDS
+ };
+ var SUBST_SIMPLE = {
+ className: 'subst',
+ begin: /#[A-Za-z$_]/, end: /(?:\-[0-9A-Za-z$_]|[0-9A-Za-z$_])*/,
+ keywords: KEYWORDS
+ };
+ var EXPRESSIONS = [
+ hljs.BINARY_NUMBER_MODE,
+ {
+ className: 'number',
+ begin: '(\\b0[xX][a-fA-F0-9_]+)|(\\b\\d(\\d|_\\d)*(\\.(\\d(\\d|_\\d)*)?)?(_*[eE]([-+]\\d(_\\d|\\d)*)?)?[_a-z]*)',
+ relevance: 0,
+ starts: {end: '(\\s*/)?', relevance: 0} // a number tries to eat the following slash to prevent treating it as a regexp
+ },
+ {
+ className: 'string',
+ variants: [
+ {
+ begin: /'''/, end: /'''/,
+ contains: [hljs.BACKSLASH_ESCAPE]
+ },
+ {
+ begin: /'/, end: /'/,
+ contains: [hljs.BACKSLASH_ESCAPE]
+ },
+ {
+ begin: /"""/, end: /"""/,
+ contains: [hljs.BACKSLASH_ESCAPE, SUBST, SUBST_SIMPLE]
+ },
+ {
+ begin: /"/, end: /"/,
+ contains: [hljs.BACKSLASH_ESCAPE, SUBST, SUBST_SIMPLE]
+ },
+ {
+ begin: /\\/, end: /(\s|$)/,
+ excludeEnd: true
+ }
+ ]
+ },
+ {
+ className: 'regexp',
+ variants: [
+ {
+ begin: '//', end: '//[gim]*',
+ contains: [SUBST, hljs.HASH_COMMENT_MODE]
+ },
+ {
+ // regex can't start with space to parse x / 2 / 3 as two divisions
+ // regex can't start with *, and it supports an "illegal" in the main mode
+ begin: /\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/
+ }
+ ]
+ },
+ {
+ begin: '@' + JS_IDENT_RE
+ },
+ {
+ begin: '``', end: '``',
+ excludeBegin: true, excludeEnd: true,
+ subLanguage: 'javascript'
+ }
+ ];
+ SUBST.contains = EXPRESSIONS;
+
+ var PARAMS = {
+ className: 'params',
+ begin: '\\(', returnBegin: true,
+ /* We need another contained nameless mode to not have every nested
+ pair of parens to be called "params" */
+ contains: [
+ {
+ begin: /\(/, end: /\)/,
+ keywords: KEYWORDS,
+ contains: ['self'].concat(EXPRESSIONS)
+ }
+ ]
+ };
+
+ return {
+ aliases: ['ls'],
+ keywords: KEYWORDS,
+ illegal: /\/\*/,
+ contains: EXPRESSIONS.concat([
+ hljs.COMMENT('\\/\\*', '\\*\\/'),
+ hljs.HASH_COMMENT_MODE,
+ {
+ className: 'function',
+ contains: [TITLE, PARAMS],
+ returnBegin: true,
+ variants: [
+ {
+ begin: '(' + JS_IDENT_RE + '\\s*(?:=|:=)\\s*)?(\\(.*\\))?\\s*\\B\\->\\*?', end: '\\->\\*?'
+ },
+ {
+ begin: '(' + JS_IDENT_RE + '\\s*(?:=|:=)\\s*)?!?(\\(.*\\))?\\s*\\B[-~]{1,2}>\\*?', end: '[-~]{1,2}>\\*?'
+ },
+ {
+ begin: '(' + JS_IDENT_RE + '\\s*(?:=|:=)\\s*)?(\\(.*\\))?\\s*\\B!?[-~]{1,2}>\\*?', end: '!?[-~]{1,2}>\\*?'
+ }
+ ]
+ },
+ {
+ className: 'class',
+ beginKeywords: 'class',
+ end: '$',
+ illegal: /[:="\[\]]/,
+ contains: [
+ {
+ beginKeywords: 'extends',
+ endsWithParent: true,
+ illegal: /[:="\[\]]/,
+ contains: [TITLE]
+ },
+ TITLE
+ ]
+ },
+ {
+ begin: JS_IDENT_RE + ':', end: ':',
+ returnBegin: true, returnEnd: true,
+ relevance: 0
+ }
+ ])
+ };
+});
+
+hljs.registerLanguage("lsl",
+/*
+Language: Linden Scripting Language
+Description: The Linden Scripting Language is used in Second Life by Linden Labs.
+Author: Builder's Brewery <buildersbrewery@gmail.com>
+Category: scripting
+*/
+
+function(hljs) {
+
+ var LSL_STRING_ESCAPE_CHARS = {
+ className: 'subst',
+ begin: /\\[tn"\\]/
+ };
+
+ var LSL_STRINGS = {
+ className: 'string',
+ begin: '"',
+ end: '"',
+ contains: [
+ LSL_STRING_ESCAPE_CHARS
+ ]
+ };
+
+ var LSL_NUMBERS = {
+ className: 'number',
+ begin: hljs.C_NUMBER_RE
+ };
+
+ var LSL_CONSTANTS = {
+ className: 'literal',
+ variants: [
+ {
+ begin: '\\b(?:PI|TWO_PI|PI_BY_TWO|DEG_TO_RAD|RAD_TO_DEG|SQRT2)\\b'
+ },
+ {
+ begin: '\\b(?:XP_ERROR_(?:EXPERIENCES_DISABLED|EXPERIENCE_(?:DISABLED|SUSPENDED)|INVALID_(?:EXPERIENCE|PARAMETERS)|KEY_NOT_FOUND|MATURITY_EXCEEDED|NONE|NOT_(?:FOUND|PERMITTED(?:_LAND)?)|NO_EXPERIENCE|QUOTA_EXCEEDED|RETRY_UPDATE|STORAGE_EXCEPTION|STORE_DISABLED|THROTTLED|UNKNOWN_ERROR)|JSON_APPEND|STATUS_(?:PHYSICS|ROTATE_[XYZ]|PHANTOM|SANDBOX|BLOCK_GRAB(?:_OBJECT)?|(?:DIE|RETURN)_AT_EDGE|CAST_SHADOWS|OK|MALFORMED_PARAMS|TYPE_MISMATCH|BOUNDS_ERROR|NOT_(?:FOUND|SUPPORTED)|INTERNAL_ERROR|WHITELIST_FAILED)|AGENT(?:_(?:BY_(?:LEGACY_|USER)NAME|FLYING|ATTACHMENTS|SCRIPTED|MOUSELOOK|SITTING|ON_OBJECT|AWAY|WALKING|IN_AIR|TYPING|CROUCHING|BUSY|ALWAYS_RUN|AUTOPILOT|LIST_(?:PARCEL(?:_OWNER)?|REGION)))?|CAMERA_(?:PITCH|DISTANCE|BEHINDNESS_(?:ANGLE|LAG)|(?:FOCUS|POSITION)(?:_(?:THRESHOLD|LOCKED|LAG))?|FOCUS_OFFSET|ACTIVE)|ANIM_ON|LOOP|REVERSE|PING_PONG|SMOOTH|ROTATE|SCALE|ALL_SIDES|LINK_(?:ROOT|SET|ALL_(?:OTHERS|CHILDREN)|THIS)|ACTIVE|PASS(?:IVE|_(?:ALWAYS|IF_NOT_HANDLED|NEVER))|SCRIPTED|CONTROL_(?:FWD|BACK|(?:ROT_)?(?:LEFT|RIGHT)|UP|DOWN|(?:ML_)?LBUTTON)|PERMISSION_(?:RETURN_OBJECTS|DEBIT|OVERRIDE_ANIMATIONS|SILENT_ESTATE_MANAGEMENT|TAKE_CONTROLS|TRIGGER_ANIMATION|ATTACH|CHANGE_LINKS|(?:CONTROL|TRACK)_CAMERA|TELEPORT)|INVENTORY_(?:TEXTURE|SOUND|OBJECT|SCRIPT|LANDMARK|CLOTHING|NOTECARD|BODYPART|ANIMATION|GESTURE|ALL|NONE)|CHANGED_(?:INVENTORY|COLOR|SHAPE|SCALE|TEXTURE|LINK|ALLOWED_DROP|OWNER|REGION(?:_START)?|TELEPORT|MEDIA)|OBJECT_(?:CLICK_ACTION|HOVER_HEIGHT|LAST_OWNER_ID|(?:PHYSICS|SERVER|STREAMING)_COST|UNKNOWN_DETAIL|CHARACTER_TIME|PHANTOM|PHYSICS|TEMP_ON_REZ|NAME|DESC|POS|PRIM_(?:COUNT|EQUIVALENCE)|RETURN_(?:PARCEL(?:_OWNER)?|REGION)|REZZER_KEY|ROO?T|VELOCITY|OMEGA|OWNER|GROUP|CREATOR|ATTACHED_POINT|RENDER_WEIGHT|(?:BODY_SHAPE|PATHFINDING)_TYPE|(?:RUNNING|TOTAL)_SCRIPT_COUNT|TOTAL_INVENTORY_COUNT|SCRIPT_(?:MEMORY|TIME))|TYPE_(?:INTEGER|FLOAT|STRING|KEY|VECTOR|ROTATION|INVALID)|(?:DEBUG|PUBLIC)_CHANNEL|ATTACH_(?:AVATAR_CENTER|CHEST|HEAD|BACK|PELVIS|MOUTH|CHIN|NECK|NOSE|BELLY|[LR](?:SHOULDER|HAND|FOOT|EAR|EYE|[UL](?:ARM|LEG)|HIP)|(?:LEFT|RIGHT)_PEC|HUD_(?:CENTER_[12]|TOP_(?:RIGHT|CENTER|LEFT)|BOTTOM(?:_(?:RIGHT|LEFT))?)|[LR]HAND_RING1|TAIL_(?:BASE|TIP)|[LR]WING|FACE_(?:JAW|[LR]EAR|[LR]EYE|TOUNGE)|GROIN|HIND_[LR]FOOT)|LAND_(?:LEVEL|RAISE|LOWER|SMOOTH|NOISE|REVERT)|DATA_(?:ONLINE|NAME|BORN|SIM_(?:POS|STATUS|RATING)|PAYINFO)|PAYMENT_INFO_(?:ON_FILE|USED)|REMOTE_DATA_(?:CHANNEL|REQUEST|REPLY)|PSYS_(?:PART_(?:BF_(?:ZERO|ONE(?:_MINUS_(?:DEST_COLOR|SOURCE_(ALPHA|COLOR)))?|DEST_COLOR|SOURCE_(ALPHA|COLOR))|BLEND_FUNC_(DEST|SOURCE)|FLAGS|(?:START|END)_(?:COLOR|ALPHA|SCALE|GLOW)|MAX_AGE|(?:RIBBON|WIND|INTERP_(?:COLOR|SCALE)|BOUNCE|FOLLOW_(?:SRC|VELOCITY)|TARGET_(?:POS|LINEAR)|EMISSIVE)_MASK)|SRC_(?:MAX_AGE|PATTERN|ANGLE_(?:BEGIN|END)|BURST_(?:RATE|PART_COUNT|RADIUS|SPEED_(?:MIN|MAX))|ACCEL|TEXTURE|TARGET_KEY|OMEGA|PATTERN_(?:DROP|EXPLODE|ANGLE(?:_CONE(?:_EMPTY)?)?)))|VEHICLE_(?:REFERENCE_FRAME|TYPE_(?:NONE|SLED|CAR|BOAT|AIRPLANE|BALLOON)|(?:LINEAR|ANGULAR)_(?:FRICTION_TIMESCALE|MOTOR_DIRECTION)|LINEAR_MOTOR_OFFSET|HOVER_(?:HEIGHT|EFFICIENCY|TIMESCALE)|BUOYANCY|(?:LINEAR|ANGULAR)_(?:DEFLECTION_(?:EFFICIENCY|TIMESCALE)|MOTOR_(?:DECAY_)?TIMESCALE)|VERTICAL_ATTRACTION_(?:EFFICIENCY|TIMESCALE)|BANKING_(?:EFFICIENCY|MIX|TIMESCALE)|FLAG_(?:NO_DEFLECTION_UP|LIMIT_(?:ROLL_ONLY|MOTOR_UP)|HOVER_(?:(?:WATER|TERRAIN|UP)_ONLY|GLOBAL_HEIGHT)|MOUSELOOK_(?:STEER|BANK)|CAMERA_DECOUPLED))|PRIM_(?:ALPHA_MODE(?:_(?:BLEND|EMISSIVE|MASK|NONE))?|NORMAL|SPECULAR|TYPE(?:_(?:BOX|CYLINDER|PRISM|SPHERE|TORUS|TUBE|RING|SCULPT))?|HOLE_(?:DEFAULT|CIRCLE|SQUARE|TRIANGLE)|MATERIAL(?:_(?:STONE|METAL|GLASS|WOOD|FLESH|PLASTIC|RUBBER))?|SHINY_(?:NONE|LOW|MEDIUM|HIGH)|BUMP_(?:NONE|BRIGHT|DARK|WOOD|BARK|BRICKS|CHECKER|CONCRETE|TILE|STONE|DISKS|GRAVEL|BLOBS|SIDING|LARGETILE|STUCCO|SUCTION|WEAVE)|TEXGEN_(?:DEFAULT|PLANAR)|SCULPT_(?:TYPE_(?:SPHERE|TORUS|PLANE|CYLINDER|MASK)|FLAG_(?:MIRROR|INVERT))|PHYSICS(?:_(?:SHAPE_(?:CONVEX|NONE|PRIM|TYPE)))?|(?:POS|ROT)_LOCAL|SLICE|TEXT|FLEXIBLE|POINT_LIGHT|TEMP_ON_REZ|PHANTOM|POSITION|SIZE|ROTATION|TEXTURE|NAME|OMEGA|DESC|LINK_TARGET|COLOR|BUMP_SHINY|FULLBRIGHT|TEXGEN|GLOW|MEDIA_(?:ALT_IMAGE_ENABLE|CONTROLS|(?:CURRENT|HOME)_URL|AUTO_(?:LOOP|PLAY|SCALE|ZOOM)|FIRST_CLICK_INTERACT|(?:WIDTH|HEIGHT)_PIXELS|WHITELIST(?:_ENABLE)?|PERMS_(?:INTERACT|CONTROL)|PARAM_MAX|CONTROLS_(?:STANDARD|MINI)|PERM_(?:NONE|OWNER|GROUP|ANYONE)|MAX_(?:URL_LENGTH|WHITELIST_(?:SIZE|COUNT)|(?:WIDTH|HEIGHT)_PIXELS)))|MASK_(?:BASE|OWNER|GROUP|EVERYONE|NEXT)|PERM_(?:TRANSFER|MODIFY|COPY|MOVE|ALL)|PARCEL_(?:MEDIA_COMMAND_(?:STOP|PAUSE|PLAY|LOOP|TEXTURE|URL|TIME|AGENT|UNLOAD|AUTO_ALIGN|TYPE|SIZE|DESC|LOOP_SET)|FLAG_(?:ALLOW_(?:FLY|(?:GROUP_)?SCRIPTS|LANDMARK|TERRAFORM|DAMAGE|CREATE_(?:GROUP_)?OBJECTS)|USE_(?:ACCESS_(?:GROUP|LIST)|BAN_LIST|LAND_PASS_LIST)|LOCAL_SOUND_ONLY|RESTRICT_PUSHOBJECT|ALLOW_(?:GROUP|ALL)_OBJECT_ENTRY)|COUNT_(?:TOTAL|OWNER|GROUP|OTHER|SELECTED|TEMP)|DETAILS_(?:NAME|DESC|OWNER|GROUP|AREA|ID|SEE_AVATARS))|LIST_STAT_(?:MAX|MIN|MEAN|MEDIAN|STD_DEV|SUM(?:_SQUARES)?|NUM_COUNT|GEOMETRIC_MEAN|RANGE)|PAY_(?:HIDE|DEFAULT)|REGION_FLAG_(?:ALLOW_DAMAGE|FIXED_SUN|BLOCK_TERRAFORM|SANDBOX|DISABLE_(?:COLLISIONS|PHYSICS)|BLOCK_FLY|ALLOW_DIRECT_TELEPORT|RESTRICT_PUSHOBJECT)|HTTP_(?:METHOD|MIMETYPE|BODY_(?:MAXLENGTH|TRUNCATED)|CUSTOM_HEADER|PRAGMA_NO_CACHE|VERBOSE_THROTTLE|VERIFY_CERT)|STRING_(?:TRIM(?:_(?:HEAD|TAIL))?)|CLICK_ACTION_(?:NONE|TOUCH|SIT|BUY|PAY|OPEN(?:_MEDIA)?|PLAY|ZOOM)|TOUCH_INVALID_FACE|PROFILE_(?:NONE|SCRIPT_MEMORY)|RC_(?:DATA_FLAGS|DETECT_PHANTOM|GET_(?:LINK_NUM|NORMAL|ROOT_KEY)|MAX_HITS|REJECT_(?:TYPES|AGENTS|(?:NON)?PHYSICAL|LAND))|RCERR_(?:CAST_TIME_EXCEEDED|SIM_PERF_LOW|UNKNOWN)|ESTATE_ACCESS_(?:ALLOWED_(?:AGENT|GROUP)_(?:ADD|REMOVE)|BANNED_AGENT_(?:ADD|REMOVE))|DENSITY|FRICTION|RESTITUTION|GRAVITY_MULTIPLIER|KFM_(?:COMMAND|CMD_(?:PLAY|STOP|PAUSE)|MODE|FORWARD|LOOP|PING_PONG|REVERSE|DATA|ROTATION|TRANSLATION)|ERR_(?:GENERIC|PARCEL_PERMISSIONS|MALFORMED_PARAMS|RUNTIME_PERMISSIONS|THROTTLED)|CHARACTER_(?:CMD_(?:(?:SMOOTH_)?STOP|JUMP)|DESIRED_(?:TURN_)?SPEED|RADIUS|STAY_WITHIN_PARCEL|LENGTH|ORIENTATION|ACCOUNT_FOR_SKIPPED_FRAMES|AVOIDANCE_MODE|TYPE(?:_(?:[ABCD]|NONE))?|MAX_(?:DECEL|TURN_RADIUS|(?:ACCEL|SPEED)))|PURSUIT_(?:OFFSET|FUZZ_FACTOR|GOAL_TOLERANCE|INTERCEPT)|REQUIRE_LINE_OF_SIGHT|FORCE_DIRECT_PATH|VERTICAL|HORIZONTAL|AVOID_(?:CHARACTERS|DYNAMIC_OBSTACLES|NONE)|PU_(?:EVADE_(?:HIDDEN|SPOTTED)|FAILURE_(?:DYNAMIC_PATHFINDING_DISABLED|INVALID_(?:GOAL|START)|NO_(?:NAVMESH|VALID_DESTINATION)|OTHER|TARGET_GONE|(?:PARCEL_)?UNREACHABLE)|(?:GOAL|SLOWDOWN_DISTANCE)_REACHED)|TRAVERSAL_TYPE(?:_(?:FAST|NONE|SLOW))?|CONTENT_TYPE_(?:ATOM|FORM|HTML|JSON|LLSD|RSS|TEXT|XHTML|XML)|GCNP_(?:RADIUS|STATIC)|(?:PATROL|WANDER)_PAUSE_AT_WAYPOINTS|OPT_(?:AVATAR|CHARACTER|EXCLUSION_VOLUME|LEGACY_LINKSET|MATERIAL_VOLUME|OTHER|STATIC_OBSTACLE|WALKABLE)|SIM_STAT_PCT_CHARS_STEPPED)\\b'
+ },
+ {
+ begin: '\\b(?:FALSE|TRUE)\\b'
+ },
+ {
+ begin: '\\b(?:ZERO_ROTATION)\\b'
+ },
+ {
+ begin: '\\b(?:EOF|JSON_(?:ARRAY|DELETE|FALSE|INVALID|NULL|NUMBER|OBJECT|STRING|TRUE)|NULL_KEY|TEXTURE_(?:BLANK|DEFAULT|MEDIA|PLYWOOD|TRANSPARENT)|URL_REQUEST_(?:GRANTED|DENIED))\\b'
+ },
+ {
+ begin: '\\b(?:ZERO_VECTOR|TOUCH_INVALID_(?:TEXCOORD|VECTOR))\\b'
+ }
+ ]
+ };
+
+ var LSL_FUNCTIONS = {
+ className: 'built_in',
+ begin: '\\b(?:ll(?:AgentInExperience|(?:Create|DataSize|Delete|KeyCount|Keys|Read|Update)KeyValue|GetExperience(?:Details|ErrorMessage)|ReturnObjectsBy(?:ID|Owner)|Json(?:2List|[GS]etValue|ValueType)|Sin|Cos|Tan|Atan2|Sqrt|Pow|Abs|Fabs|Frand|Floor|Ceil|Round|Vec(?:Mag|Norm|Dist)|Rot(?:Between|2(?:Euler|Fwd|Left|Up))|(?:Euler|Axes)2Rot|Whisper|(?:Region|Owner)?Say|Shout|Listen(?:Control|Remove)?|Sensor(?:Repeat|Remove)?|Detected(?:Name|Key|Owner|Type|Pos|Vel|Grab|Rot|Group|LinkNumber)|Die|Ground|Wind|(?:[GS]et)(?:AnimationOverride|MemoryLimit|PrimMediaParams|ParcelMusicURL|Object(?:Desc|Name)|PhysicsMaterial|Status|Scale|Color|Alpha|Texture|Pos|Rot|Force|Torque)|ResetAnimationOverride|(?:Scale|Offset|Rotate)Texture|(?:Rot)?Target(?:Remove)?|(?:Stop)?MoveToTarget|Apply(?:Rotational)?Impulse|Set(?:KeyframedMotion|ContentType|RegionPos|(?:Angular)?Velocity|Buoyancy|HoverHeight|ForceAndTorque|TimerEvent|ScriptState|Damage|TextureAnim|Sound(?:Queueing|Radius)|Vehicle(?:Type|(?:Float|Vector|Rotation)Param)|(?:Touch|Sit)?Text|Camera(?:Eye|At)Offset|PrimitiveParams|ClickAction|Link(?:Alpha|Color|PrimitiveParams(?:Fast)?|Texture(?:Anim)?|Camera|Media)|RemoteScriptAccessPin|PayPrice|LocalRot)|ScaleByFactor|Get(?:(?:Max|Min)ScaleFactor|ClosestNavPoint|StaticPath|SimStats|Env|PrimitiveParams|Link(?:PrimitiveParams|Number(?:OfSides)?|Key|Name|Media)|HTTPHeader|FreeURLs|Object(?:Details|PermMask|PrimCount)|Parcel(?:MaxPrims|Details|Prim(?:Count|Owners))|Attached(?:List)?|(?:SPMax|Free|Used)Memory|Region(?:Name|TimeDilation|FPS|Corner|AgentCount)|Root(?:Position|Rotation)|UnixTime|(?:Parcel|Region)Flags|(?:Wall|GMT)clock|SimulatorHostname|BoundingBox|GeometricCenter|Creator|NumberOf(?:Prims|NotecardLines|Sides)|Animation(?:List)?|(?:Camera|Local)(?:Pos|Rot)|Vel|Accel|Omega|Time(?:stamp|OfDay)|(?:Object|CenterOf)?Mass|MassMKS|Energy|Owner|(?:Owner)?Key|SunDirection|Texture(?:Offset|Scale|Rot)|Inventory(?:Number|Name|Key|Type|Creator|PermMask)|Permissions(?:Key)?|StartParameter|List(?:Length|EntryType)|Date|Agent(?:Size|Info|Language|List)|LandOwnerAt|NotecardLine|Script(?:Name|State))|(?:Get|Reset|GetAndReset)Time|PlaySound(?:Slave)?|LoopSound(?:Master|Slave)?|(?:Trigger|Stop|Preload)Sound|(?:(?:Get|Delete)Sub|Insert)String|To(?:Upper|Lower)|Give(?:InventoryList|Money)|RezObject|(?:Stop)?LookAt|Sleep|CollisionFilter|(?:Take|Release)Controls|DetachFromAvatar|AttachToAvatar(?:Temp)?|InstantMessage|(?:GetNext)?Email|StopHover|MinEventDelay|RotLookAt|String(?:Length|Trim)|(?:Start|Stop)Animation|TargetOmega|Request(?:Experience)?Permissions|(?:Create|Break)Link|BreakAllLinks|(?:Give|Remove)Inventory|Water|PassTouches|Request(?:Agent|Inventory)Data|TeleportAgent(?:Home|GlobalCoords)?|ModifyLand|CollisionSound|ResetScript|MessageLinked|PushObject|PassCollisions|AxisAngle2Rot|Rot2(?:Axis|Angle)|A(?:cos|sin)|AngleBetween|AllowInventoryDrop|SubStringIndex|List2(?:CSV|Integer|Json|Float|String|Key|Vector|Rot|List(?:Strided)?)|DeleteSubList|List(?:Statistics|Sort|Randomize|(?:Insert|Find|Replace)List)|EdgeOfWorld|AdjustSoundVolume|Key2Name|TriggerSoundLimited|EjectFromLand|(?:CSV|ParseString)2List|OverMyLand|SameGroup|UnSit|Ground(?:Slope|Normal|Contour)|GroundRepel|(?:Set|Remove)VehicleFlags|(?:AvatarOn)?(?:Link)?SitTarget|Script(?:Danger|Profiler)|Dialog|VolumeDetect|ResetOtherScript|RemoteLoadScriptPin|(?:Open|Close)RemoteDataChannel|SendRemoteData|RemoteDataReply|(?:Integer|String)ToBase64|XorBase64|Log(?:10)?|Base64To(?:String|Integer)|ParseStringKeepNulls|RezAtRoot|RequestSimulatorData|ForceMouselook|(?:Load|Release|(?:E|Une)scape)URL|ParcelMedia(?:CommandList|Query)|ModPow|MapDestination|(?:RemoveFrom|AddTo|Reset)Land(?:Pass|Ban)List|(?:Set|Clear)CameraParams|HTTP(?:Request|Response)|TextBox|DetectedTouch(?:UV|Face|Pos|(?:N|Bin)ormal|ST)|(?:MD5|SHA1|DumpList2)String|Request(?:Secure)?URL|Clear(?:Prim|Link)Media|(?:Link)?ParticleSystem|(?:Get|Request)(?:Username|DisplayName)|RegionSayTo|CastRay|GenerateKey|TransferLindenDollars|ManageEstateAccess|(?:Create|Delete)Character|ExecCharacterCmd|Evade|FleeFrom|NavigateTo|PatrolPoints|Pursue|UpdateCharacter|WanderWithin))\\b'
+ };
+
+ return {
+ illegal: ':',
+ contains: [
+ LSL_STRINGS,
+ {
+ className: 'comment',
+ variants: [
+ hljs.COMMENT('//', '$'),
+ hljs.COMMENT('/\\*', '\\*/')
+ ]
+ },
+ LSL_NUMBERS,
+ {
+ className: 'section',
+ variants: [
+ {
+ begin: '\\b(?:state|default)\\b'
+ },
+ {
+ begin: '\\b(?:state_(?:entry|exit)|touch(?:_(?:start|end))?|(?:land_)?collision(?:_(?:start|end))?|timer|listen|(?:no_)?sensor|control|(?:not_)?at_(?:rot_)?target|money|email|experience_permissions(?:_denied)?|run_time_permissions|changed|attach|dataserver|moving_(?:start|end)|link_message|(?:on|object)_rez|remote_data|http_re(?:sponse|quest)|path_update|transaction_result)\\b'
+ }
+ ]
+ },
+ LSL_FUNCTIONS,
+ LSL_CONSTANTS,
+ {
+ className: 'type',
+ begin: '\\b(?:integer|float|string|key|vector|quaternion|rotation|list)\\b'
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("lua",
+/*
+Language: Lua
+Author: Andrew Fedorov <dmmdrs@mail.ru>
+Category: scripting
+*/
+
+function(hljs) {
+ var OPENING_LONG_BRACKET = '\\[=*\\[';
+ var CLOSING_LONG_BRACKET = '\\]=*\\]';
+ var LONG_BRACKETS = {
+ begin: OPENING_LONG_BRACKET, end: CLOSING_LONG_BRACKET,
+ contains: ['self']
+ };
+ var COMMENTS = [
+ hljs.COMMENT('--(?!' + OPENING_LONG_BRACKET + ')', '$'),
+ hljs.COMMENT(
+ '--' + OPENING_LONG_BRACKET,
+ CLOSING_LONG_BRACKET,
+ {
+ contains: [LONG_BRACKETS],
+ relevance: 10
+ }
+ )
+ ];
+ return {
+ lexemes: hljs.UNDERSCORE_IDENT_RE,
+ keywords: {
+ keyword:
+ 'and break do else elseif end false for if in local nil not or repeat return then ' +
+ 'true until while',
+ built_in:
+ '_G _VERSION assert collectgarbage dofile error getfenv getmetatable ipairs load ' +
+ 'loadfile loadstring module next pairs pcall print rawequal rawget rawset require ' +
+ 'select setfenv setmetatable tonumber tostring type unpack xpcall coroutine debug ' +
+ 'io math os package string table'
+ },
+ contains: COMMENTS.concat([
+ {
+ className: 'function',
+ beginKeywords: 'function', end: '\\)',
+ contains: [
+ hljs.inherit(hljs.TITLE_MODE, {begin: '([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*'}),
+ {
+ className: 'params',
+ begin: '\\(', endsWithParent: true,
+ contains: COMMENTS
+ }
+ ].concat(COMMENTS)
+ },
+ hljs.C_NUMBER_MODE,
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ {
+ className: 'string',
+ begin: OPENING_LONG_BRACKET, end: CLOSING_LONG_BRACKET,
+ contains: [LONG_BRACKETS],
+ relevance: 5
+ }
+ ])
+ };
+});
+
+hljs.registerLanguage("makefile",
+/*
+Language: Makefile
+Author: Ivan Sagalaev <maniac@softwaremaniacs.org>
+Category: common
+*/
+
+function(hljs) {
+ var VARIABLE = {
+ className: 'variable',
+ begin: /\$\(/, end: /\)/,
+ contains: [hljs.BACKSLASH_ESCAPE]
+ };
+ return {
+ aliases: ['mk', 'mak'],
+ contains: [
+ hljs.HASH_COMMENT_MODE,
+ {
+ begin: /^\w+\s*\W*=/, returnBegin: true,
+ relevance: 0,
+ starts: {
+ end: /\s*\W*=/, excludeEnd: true,
+ starts: {
+ end: /$/,
+ relevance: 0,
+ contains: [
+ VARIABLE
+ ]
+ }
+ }
+ },
+ {
+ className: 'section',
+ begin: /^[\w]+:\s*$/
+ },
+ {
+ className: 'meta',
+ begin: /^\.PHONY:/, end: /$/,
+ keywords: {'meta-keyword': '.PHONY'}, lexemes: /[\.\w]+/
+ },
+ {
+ begin: /^\t+/, end: /$/,
+ relevance: 0,
+ contains: [
+ hljs.QUOTE_STRING_MODE,
+ VARIABLE
+ ]
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("mathematica",
+/*
+Language: Mathematica
+Author: Daniel Kvasnicka <dkvasnicka@vendavo.com>
+Category: scientific
+*/
+
+function(hljs) {
+ return {
+ aliases: ['mma'],
+ lexemes: '(\\$|\\b)' + hljs.IDENT_RE + '\\b',
+ keywords: 'AbelianGroup Abort AbortKernels AbortProtect Above Abs Absolute AbsoluteCorrelation AbsoluteCorrelationFunction AbsoluteCurrentValue AbsoluteDashing AbsoluteFileName AbsoluteOptions AbsolutePointSize AbsoluteThickness AbsoluteTime AbsoluteTiming AccountingForm Accumulate Accuracy AccuracyGoal ActionDelay ActionMenu ActionMenuBox ActionMenuBoxOptions Active ActiveItem ActiveStyle AcyclicGraphQ AddOnHelpPath AddTo AdjacencyGraph AdjacencyList AdjacencyMatrix AdjustmentBox AdjustmentBoxOptions AdjustTimeSeriesForecast AffineTransform After AiryAi AiryAiPrime AiryAiZero AiryBi AiryBiPrime AiryBiZero AlgebraicIntegerQ AlgebraicNumber AlgebraicNumberDenominator AlgebraicNumberNorm AlgebraicNumberPolynomial AlgebraicNumberTrace AlgebraicRules AlgebraicRulesData Algebraics AlgebraicUnitQ Alignment AlignmentMarker AlignmentPoint All AllowedDimensions AllowGroupClose AllowInlineCells AllowKernelInitialization AllowReverseGroupClose AllowScriptLevelChange AlphaChannel AlternatingGroup AlternativeHypothesis Alternatives AmbientLight Analytic AnchoredSearch And AndersonDarlingTest AngerJ AngleBracket AngularGauge Animate AnimationCycleOffset AnimationCycleRepetitions AnimationDirection AnimationDisplayTime AnimationRate AnimationRepetitions AnimationRunning Animator AnimatorBox AnimatorBoxOptions AnimatorElements Annotation Annuity AnnuityDue Antialiasing Antisymmetric Apart ApartSquareFree Appearance AppearanceElements AppellF1 Append AppendTo Apply ArcCos ArcCosh ArcCot ArcCoth ArcCsc ArcCsch ArcSec ArcSech ArcSin ArcSinDistribution ArcSinh ArcTan ArcTanh Arg ArgMax ArgMin ArgumentCountQ ARIMAProcess ArithmeticGeometricMean ARMAProcess ARProcess Array ArrayComponents ArrayDepth ArrayFlatten ArrayPad ArrayPlot ArrayQ ArrayReshape ArrayRules Arrays Arrow Arrow3DBox ArrowBox Arrowheads AspectRatio AspectRatioFixed Assert Assuming Assumptions AstronomicalData Asynchronous AsynchronousTaskObject AsynchronousTasks AtomQ Attributes AugmentedSymmetricPolynomial AutoAction AutoDelete AutoEvaluateEvents AutoGeneratedPackage AutoIndent AutoIndentSpacings AutoItalicWords AutoloadPath AutoMatch Automatic AutomaticImageSize AutoMultiplicationSymbol AutoNumberFormatting AutoOpenNotebooks AutoOpenPalettes AutorunSequencing AutoScaling AutoScroll AutoSpacing AutoStyleOptions AutoStyleWords Axes AxesEdge AxesLabel AxesOrigin AxesStyle Axis ' +
+ 'BabyMonsterGroupB Back Background BackgroundTasksSettings Backslash Backsubstitution Backward Band BandpassFilter BandstopFilter BarabasiAlbertGraphDistribution BarChart BarChart3D BarLegend BarlowProschanImportance BarnesG BarOrigin BarSpacing BartlettHannWindow BartlettWindow BaseForm Baseline BaselinePosition BaseStyle BatesDistribution BattleLemarieWavelet Because BeckmannDistribution Beep Before Begin BeginDialogPacket BeginFrontEndInteractionPacket BeginPackage BellB BellY Below BenfordDistribution BeniniDistribution BenktanderGibratDistribution BenktanderWeibullDistribution BernoulliB BernoulliDistribution BernoulliGraphDistribution BernoulliProcess BernsteinBasis BesselFilterModel BesselI BesselJ BesselJZero BesselK BesselY BesselYZero Beta BetaBinomialDistribution BetaDistribution BetaNegativeBinomialDistribution BetaPrimeDistribution BetaRegularized BetweennessCentrality BezierCurve BezierCurve3DBox BezierCurve3DBoxOptions BezierCurveBox BezierCurveBoxOptions BezierFunction BilateralFilter Binarize BinaryFormat BinaryImageQ BinaryRead BinaryReadList BinaryWrite BinCounts BinLists Binomial BinomialDistribution BinomialProcess BinormalDistribution BiorthogonalSplineWavelet BipartiteGraphQ BirnbaumImportance BirnbaumSaundersDistribution BitAnd BitClear BitGet BitLength BitNot BitOr BitSet BitShiftLeft BitShiftRight BitXor Black BlackmanHarrisWindow BlackmanNuttallWindow BlackmanWindow Blank BlankForm BlankNullSequence BlankSequence Blend Block BlockRandom BlomqvistBeta BlomqvistBetaTest Blue Blur BodePlot BohmanWindow Bold Bookmarks Boole BooleanConsecutiveFunction BooleanConvert BooleanCountingFunction BooleanFunction BooleanGraph BooleanMaxterms BooleanMinimize BooleanMinterms Booleans BooleanTable BooleanVariables BorderDimensions BorelTannerDistribution Bottom BottomHatTransform BoundaryStyle Bounds Box BoxBaselineShift BoxData BoxDimensions Boxed Boxes BoxForm BoxFormFormatTypes BoxFrame BoxID BoxMargins BoxMatrix BoxRatios BoxRotation BoxRotationPoint BoxStyle BoxWhiskerChart Bra BracketingBar BraKet BrayCurtisDistance BreadthFirstScan Break Brown BrownForsytheTest BrownianBridgeProcess BrowserCategory BSplineBasis BSplineCurve BSplineCurve3DBox BSplineCurveBox BSplineCurveBoxOptions BSplineFunction BSplineSurface BSplineSurface3DBox BubbleChart BubbleChart3D BubbleScale BubbleSizes BulletGauge BusinessDayQ ButterflyGraph ButterworthFilterModel Button ButtonBar ButtonBox ButtonBoxOptions ButtonCell ButtonContents ButtonData ButtonEvaluator ButtonExpandable ButtonFrame ButtonFunction ButtonMargins ButtonMinHeight ButtonNote ButtonNotebook ButtonSource ButtonStyle ButtonStyleMenuListing Byte ByteCount ByteOrdering ' +
+ 'C CachedValue CacheGraphics CalendarData CalendarType CallPacket CanberraDistance Cancel CancelButton CandlestickChart Cap CapForm CapitalDifferentialD CardinalBSplineBasis CarmichaelLambda Cases Cashflow Casoratian Catalan CatalanNumber Catch CauchyDistribution CauchyWindow CayleyGraph CDF CDFDeploy CDFInformation CDFWavelet Ceiling Cell CellAutoOverwrite CellBaseline CellBoundingBox CellBracketOptions CellChangeTimes CellContents CellContext CellDingbat CellDynamicExpression CellEditDuplicate CellElementsBoundingBox CellElementSpacings CellEpilog CellEvaluationDuplicate CellEvaluationFunction CellEventActions CellFrame CellFrameColor CellFrameLabelMargins CellFrameLabels CellFrameMargins CellGroup CellGroupData CellGrouping CellGroupingRules CellHorizontalScrolling CellID CellLabel CellLabelAutoDelete CellLabelMargins CellLabelPositioning CellMargins CellObject CellOpen CellPrint CellProlog Cells CellSize CellStyle CellTags CellularAutomaton CensoredDistribution Censoring Center CenterDot CentralMoment CentralMomentGeneratingFunction CForm ChampernowneNumber ChanVeseBinarize Character CharacterEncoding CharacterEncodingsPath CharacteristicFunction CharacteristicPolynomial CharacterRange Characters ChartBaseStyle ChartElementData ChartElementDataFunction ChartElementFunction ChartElements ChartLabels ChartLayout ChartLegends ChartStyle Chebyshev1FilterModel Chebyshev2FilterModel ChebyshevDistance ChebyshevT ChebyshevU Check CheckAbort CheckAll Checkbox CheckboxBar CheckboxBox CheckboxBoxOptions ChemicalData ChessboardDistance ChiDistribution ChineseRemainder ChiSquareDistribution ChoiceButtons ChoiceDialog CholeskyDecomposition Chop Circle CircleBox CircleDot CircleMinus CirclePlus CircleTimes CirculantGraph CityData Clear ClearAll ClearAttributes ClearSystemCache ClebschGordan ClickPane Clip ClipboardNotebook ClipFill ClippingStyle ClipPlanes ClipRange Clock ClockGauge ClockwiseContourIntegral Close Closed CloseKernels ClosenessCentrality Closing ClosingAutoSave ClosingEvent ClusteringComponents CMYKColor Coarse Coefficient CoefficientArrays CoefficientDomain CoefficientList CoefficientRules CoifletWavelet Collect Colon ColonForm ColorCombine ColorConvert ColorData ColorDataFunction ColorFunction ColorFunctionScaling Colorize ColorNegate ColorOutput ColorProfileData ColorQuantize ColorReplace ColorRules ColorSelectorSettings ColorSeparate ColorSetter ColorSetterBox ColorSetterBoxOptions ColorSlider ColorSpace Column ColumnAlignments ColumnBackgrounds ColumnForm ColumnLines ColumnsEqual ColumnSpacings ColumnWidths CommonDefaultFormatTypes Commonest CommonestFilter CommonUnits CommunityBoundaryStyle CommunityGraphPlot CommunityLabels CommunityRegionStyle CompatibleUnitQ CompilationOptions CompilationTarget Compile Compiled CompiledFunction Complement CompleteGraph CompleteGraphQ CompleteKaryTree CompletionsListPacket Complex Complexes ComplexExpand ComplexInfinity ComplexityFunction ComponentMeasurements ' +
+ 'ComponentwiseContextMenu Compose ComposeList ComposeSeries Composition CompoundExpression CompoundPoissonDistribution CompoundPoissonProcess CompoundRenewalProcess Compress CompressedData Condition ConditionalExpression Conditioned Cone ConeBox ConfidenceLevel ConfidenceRange ConfidenceTransform ConfigurationPath Congruent Conjugate ConjugateTranspose Conjunction Connect ConnectedComponents ConnectedGraphQ ConnesWindow ConoverTest ConsoleMessage ConsoleMessagePacket ConsolePrint Constant ConstantArray Constants ConstrainedMax ConstrainedMin ContentPadding ContentsBoundingBox ContentSelectable ContentSize Context ContextMenu Contexts ContextToFilename ContextToFileName Continuation Continue ContinuedFraction ContinuedFractionK ContinuousAction ContinuousMarkovProcess ContinuousTimeModelQ ContinuousWaveletData ContinuousWaveletTransform ContourDetect ContourGraphics ContourIntegral ContourLabels ContourLines ContourPlot ContourPlot3D Contours ContourShading ContourSmoothing ContourStyle ContraharmonicMean Control ControlActive ControlAlignment ControllabilityGramian ControllabilityMatrix ControllableDecomposition ControllableModelQ ControllerDuration ControllerInformation ControllerInformationData ControllerLinking ControllerManipulate ControllerMethod ControllerPath ControllerState ControlPlacement ControlsRendering ControlType Convergents ConversionOptions ConversionRules ConvertToBitmapPacket ConvertToPostScript ConvertToPostScriptPacket Convolve ConwayGroupCo1 ConwayGroupCo2 ConwayGroupCo3 CoordinateChartData CoordinatesToolOptions CoordinateTransform CoordinateTransformData CoprimeQ Coproduct CopulaDistribution Copyable CopyDirectory CopyFile CopyTag CopyToClipboard CornerFilter CornerNeighbors Correlation CorrelationDistance CorrelationFunction CorrelationTest Cos Cosh CoshIntegral CosineDistance CosineWindow CosIntegral Cot Coth Count CounterAssignments CounterBox CounterBoxOptions CounterClockwiseContourIntegral CounterEvaluator CounterFunction CounterIncrements CounterStyle CounterStyleMenuListing CountRoots CountryData Covariance CovarianceEstimatorFunction CovarianceFunction CoxianDistribution CoxIngersollRossProcess CoxModel CoxModelFit CramerVonMisesTest CreateArchive CreateDialog CreateDirectory CreateDocument CreateIntermediateDirectories CreatePalette CreatePalettePacket CreateScheduledTask CreateTemporary CreateWindow CriticalityFailureImportance CriticalitySuccessImportance CriticalSection Cross CrossingDetect CrossMatrix Csc Csch CubeRoot Cubics Cuboid CuboidBox Cumulant CumulantGeneratingFunction Cup CupCap Curl CurlyDoubleQuote CurlyQuote CurrentImage CurrentlySpeakingPacket CurrentValue CurvatureFlowFilter CurveClosed Cyan CycleGraph CycleIndexPolynomial Cycles CyclicGroup Cyclotomic Cylinder CylinderBox CylindricalDecomposition ' +
+ 'D DagumDistribution DamerauLevenshteinDistance DampingFactor Darker Dashed Dashing DataCompression DataDistribution DataRange DataReversed Date DateDelimiters DateDifference DateFunction DateList DateListLogPlot DateListPlot DatePattern DatePlus DateRange DateString DateTicksFormat DaubechiesWavelet DavisDistribution DawsonF DayCount DayCountConvention DayMatchQ DayName DayPlus DayRange DayRound DeBruijnGraph Debug DebugTag Decimal DeclareKnownSymbols DeclarePackage Decompose Decrement DedekindEta Default DefaultAxesStyle DefaultBaseStyle DefaultBoxStyle DefaultButton DefaultColor DefaultControlPlacement DefaultDuplicateCellStyle DefaultDuration DefaultElement DefaultFaceGridsStyle DefaultFieldHintStyle DefaultFont DefaultFontProperties DefaultFormatType DefaultFormatTypeForStyle DefaultFrameStyle DefaultFrameTicksStyle DefaultGridLinesStyle DefaultInlineFormatType DefaultInputFormatType DefaultLabelStyle DefaultMenuStyle DefaultNaturalLanguage DefaultNewCellStyle DefaultNewInlineCellStyle DefaultNotebook DefaultOptions DefaultOutputFormatType DefaultStyle DefaultStyleDefinitions DefaultTextFormatType DefaultTextInlineFormatType DefaultTicksStyle DefaultTooltipStyle DefaultValues Defer DefineExternal DefineInputStreamMethod DefineOutputStreamMethod Definition Degree DegreeCentrality DegreeGraphDistribution DegreeLexicographic DegreeReverseLexicographic Deinitialization Del Deletable Delete DeleteBorderComponents DeleteCases DeleteContents DeleteDirectory DeleteDuplicates DeleteFile DeleteSmallComponents DeleteWithContents DeletionWarning Delimiter DelimiterFlashTime DelimiterMatching Delimiters Denominator DensityGraphics DensityHistogram DensityPlot DependentVariables Deploy Deployed Depth DepthFirstScan Derivative DerivativeFilter DescriptorStateSpace DesignMatrix Det DGaussianWavelet DiacriticalPositioning Diagonal DiagonalMatrix Dialog DialogIndent DialogInput DialogLevel DialogNotebook DialogProlog DialogReturn DialogSymbols Diamond DiamondMatrix DiceDissimilarity DictionaryLookup DifferenceDelta DifferenceOrder DifferenceRoot DifferenceRootReduce Differences DifferentialD DifferentialRoot DifferentialRootReduce DifferentiatorFilter DigitBlock DigitBlockMinimum DigitCharacter DigitCount DigitQ DihedralGroup Dilation Dimensions DiracComb DiracDelta DirectedEdge DirectedEdges DirectedGraph DirectedGraphQ DirectedInfinity Direction Directive Directory DirectoryName DirectoryQ DirectoryStack DirichletCharacter DirichletConvolve DirichletDistribution DirichletL DirichletTransform DirichletWindow DisableConsolePrintPacket DiscreteChirpZTransform DiscreteConvolve DiscreteDelta DiscreteHadamardTransform DiscreteIndicator DiscreteLQEstimatorGains DiscreteLQRegulatorGains DiscreteLyapunovSolve DiscreteMarkovProcess DiscretePlot DiscretePlot3D DiscreteRatio DiscreteRiccatiSolve DiscreteShift DiscreteTimeModelQ DiscreteUniformDistribution DiscreteVariables DiscreteWaveletData DiscreteWaveletPacketTransform ' +
+ 'DiscreteWaveletTransform Discriminant Disjunction Disk DiskBox DiskMatrix Dispatch DispersionEstimatorFunction Display DisplayAllSteps DisplayEndPacket DisplayFlushImagePacket DisplayForm DisplayFunction DisplayPacket DisplayRules DisplaySetSizePacket DisplayString DisplayTemporary DisplayWith DisplayWithRef DisplayWithVariable DistanceFunction DistanceTransform Distribute Distributed DistributedContexts DistributeDefinitions DistributionChart DistributionDomain DistributionFitTest DistributionParameterAssumptions DistributionParameterQ Dithering Div Divergence Divide DivideBy Dividers Divisible Divisors DivisorSigma DivisorSum DMSList DMSString Do DockedCells DocumentNotebook DominantColors DOSTextFormat Dot DotDashed DotEqual Dotted DoubleBracketingBar DoubleContourIntegral DoubleDownArrow DoubleLeftArrow DoubleLeftRightArrow DoubleLeftTee DoubleLongLeftArrow DoubleLongLeftRightArrow DoubleLongRightArrow DoubleRightArrow DoubleRightTee DoubleUpArrow DoubleUpDownArrow DoubleVerticalBar DoublyInfinite Down DownArrow DownArrowBar DownArrowUpArrow DownLeftRightVector DownLeftTeeVector DownLeftVector DownLeftVectorBar DownRightTeeVector DownRightVector DownRightVectorBar Downsample DownTee DownTeeArrow DownValues DragAndDrop DrawEdges DrawFrontFaces DrawHighlighted Drop DSolve Dt DualLinearProgramming DualSystemsModel DumpGet DumpSave DuplicateFreeQ Dynamic DynamicBox DynamicBoxOptions DynamicEvaluationTimeout DynamicLocation DynamicModule DynamicModuleBox DynamicModuleBoxOptions DynamicModuleParent DynamicModuleValues DynamicName DynamicNamespace DynamicReference DynamicSetting DynamicUpdating DynamicWrapper DynamicWrapperBox DynamicWrapperBoxOptions ' +
+ 'E EccentricityCentrality EdgeAdd EdgeBetweennessCentrality EdgeCapacity EdgeCapForm EdgeColor EdgeConnectivity EdgeCost EdgeCount EdgeCoverQ EdgeDashing EdgeDelete EdgeDetect EdgeForm EdgeIndex EdgeJoinForm EdgeLabeling EdgeLabels EdgeLabelStyle EdgeList EdgeOpacity EdgeQ EdgeRenderingFunction EdgeRules EdgeShapeFunction EdgeStyle EdgeThickness EdgeWeight Editable EditButtonSettings EditCellTagsSettings EditDistance EffectiveInterest Eigensystem Eigenvalues EigenvectorCentrality Eigenvectors Element ElementData Eliminate EliminationOrder EllipticE EllipticExp EllipticExpPrime EllipticF EllipticFilterModel EllipticK EllipticLog EllipticNomeQ EllipticPi EllipticReducedHalfPeriods EllipticTheta EllipticThetaPrime EmitSound EmphasizeSyntaxErrors EmpiricalDistribution Empty EmptyGraphQ EnableConsolePrintPacket Enabled Encode End EndAdd EndDialogPacket EndFrontEndInteractionPacket EndOfFile EndOfLine EndOfString EndPackage EngineeringForm Enter EnterExpressionPacket EnterTextPacket Entropy EntropyFilter Environment Epilog Equal EqualColumns EqualRows EqualTilde EquatedTo Equilibrium EquirippleFilterKernel Equivalent Erf Erfc Erfi ErlangB ErlangC ErlangDistribution Erosion ErrorBox ErrorBoxOptions ErrorNorm ErrorPacket ErrorsDialogSettings EstimatedDistribution EstimatedProcess EstimatorGains EstimatorRegulator EuclideanDistance EulerE EulerGamma EulerianGraphQ EulerPhi Evaluatable Evaluate Evaluated EvaluatePacket EvaluationCell EvaluationCompletionAction EvaluationElements EvaluationMode EvaluationMonitor EvaluationNotebook EvaluationObject EvaluationOrder Evaluator EvaluatorNames EvenQ EventData EventEvaluator EventHandler EventHandlerTag EventLabels ExactBlackmanWindow ExactNumberQ ExactRootIsolation ExampleData Except ExcludedForms ExcludePods Exclusions ExclusionsStyle Exists Exit ExitDialog Exp Expand ExpandAll ExpandDenominator ExpandFileName ExpandNumerator Expectation ExpectationE ExpectedValue ExpGammaDistribution ExpIntegralE ExpIntegralEi Exponent ExponentFunction ExponentialDistribution ExponentialFamily ExponentialGeneratingFunction ExponentialMovingAverage ExponentialPowerDistribution ExponentPosition ExponentStep Export ExportAutoReplacements ExportPacket ExportString Expression ExpressionCell ExpressionPacket ExpToTrig ExtendedGCD Extension ExtentElementFunction ExtentMarkers ExtentSize ExternalCall ExternalDataCharacterEncoding Extract ExtractArchive ExtremeValueDistribution ' +
+ 'FaceForm FaceGrids FaceGridsStyle Factor FactorComplete Factorial Factorial2 FactorialMoment FactorialMomentGeneratingFunction FactorialPower FactorInteger FactorList FactorSquareFree FactorSquareFreeList FactorTerms FactorTermsList Fail FailureDistribution False FARIMAProcess FEDisableConsolePrintPacket FeedbackSector FeedbackSectorStyle FeedbackType FEEnableConsolePrintPacket Fibonacci FieldHint FieldHintStyle FieldMasked FieldSize File FileBaseName FileByteCount FileDate FileExistsQ FileExtension FileFormat FileHash FileInformation FileName FileNameDepth FileNameDialogSettings FileNameDrop FileNameJoin FileNames FileNameSetter FileNameSplit FileNameTake FilePrint FileType FilledCurve FilledCurveBox Filling FillingStyle FillingTransform FilterRules FinancialBond FinancialData FinancialDerivative FinancialIndicator Find FindArgMax FindArgMin FindClique FindClusters FindCurvePath FindDistributionParameters FindDivisions FindEdgeCover FindEdgeCut FindEulerianCycle FindFaces FindFile FindFit FindGeneratingFunction FindGeoLocation FindGeometricTransform FindGraphCommunities FindGraphIsomorphism FindGraphPartition FindHamiltonianCycle FindIndependentEdgeSet FindIndependentVertexSet FindInstance FindIntegerNullVector FindKClan FindKClique FindKClub FindKPlex FindLibrary FindLinearRecurrence FindList FindMaximum FindMaximumFlow FindMaxValue FindMinimum FindMinimumCostFlow FindMinimumCut FindMinValue FindPermutation FindPostmanTour FindProcessParameters FindRoot FindSequenceFunction FindSettings FindShortestPath FindShortestTour FindThreshold FindVertexCover FindVertexCut Fine FinishDynamic FiniteAbelianGroupCount FiniteGroupCount FiniteGroupData First FirstPassageTimeDistribution FischerGroupFi22 FischerGroupFi23 FischerGroupFi24Prime FisherHypergeometricDistribution FisherRatioTest FisherZDistribution Fit FitAll FittedModel FixedPoint FixedPointList FlashSelection Flat Flatten FlattenAt FlatTopWindow FlipView Floor FlushPrintOutputPacket Fold FoldList Font FontColor FontFamily FontForm FontName FontOpacity FontPostScriptName FontProperties FontReencoding FontSize FontSlant FontSubstitutions FontTracking FontVariations FontWeight For ForAll Format FormatRules FormatType FormatTypeAutoConvert FormatValues FormBox FormBoxOptions FortranForm Forward ForwardBackward Fourier FourierCoefficient FourierCosCoefficient FourierCosSeries FourierCosTransform FourierDCT FourierDCTFilter FourierDCTMatrix FourierDST FourierDSTMatrix FourierMatrix FourierParameters FourierSequenceTransform FourierSeries FourierSinCoefficient FourierSinSeries FourierSinTransform FourierTransform FourierTrigSeries FractionalBrownianMotionProcess FractionalPart FractionBox FractionBoxOptions FractionLine Frame FrameBox FrameBoxOptions Framed FrameInset FrameLabel Frameless FrameMargins FrameStyle FrameTicks FrameTicksStyle FRatioDistribution FrechetDistribution FreeQ FrequencySamplingFilterKernel FresnelC FresnelS Friday FrobeniusNumber FrobeniusSolve ' +
+ 'FromCharacterCode FromCoefficientRules FromContinuedFraction FromDate FromDigits FromDMS Front FrontEndDynamicExpression FrontEndEventActions FrontEndExecute FrontEndObject FrontEndResource FrontEndResourceString FrontEndStackSize FrontEndToken FrontEndTokenExecute FrontEndValueCache FrontEndVersion FrontFaceColor FrontFaceOpacity Full FullAxes FullDefinition FullForm FullGraphics FullOptions FullSimplify Function FunctionExpand FunctionInterpolation FunctionSpace FussellVeselyImportance ' +
+ 'GaborFilter GaborMatrix GaborWavelet GainMargins GainPhaseMargins Gamma GammaDistribution GammaRegularized GapPenalty Gather GatherBy GaugeFaceElementFunction GaugeFaceStyle GaugeFrameElementFunction GaugeFrameSize GaugeFrameStyle GaugeLabels GaugeMarkers GaugeStyle GaussianFilter GaussianIntegers GaussianMatrix GaussianWindow GCD GegenbauerC General GeneralizedLinearModelFit GenerateConditions GeneratedCell GeneratedParameters GeneratingFunction Generic GenericCylindricalDecomposition GenomeData GenomeLookup GeodesicClosing GeodesicDilation GeodesicErosion GeodesicOpening GeoDestination GeodesyData GeoDirection GeoDistance GeoGridPosition GeometricBrownianMotionProcess GeometricDistribution GeometricMean GeometricMeanFilter GeometricTransformation GeometricTransformation3DBox GeometricTransformation3DBoxOptions GeometricTransformationBox GeometricTransformationBoxOptions GeoPosition GeoPositionENU GeoPositionXYZ GeoProjectionData GestureHandler GestureHandlerTag Get GetBoundingBoxSizePacket GetContext GetEnvironment GetFileName GetFrontEndOptionsDataPacket GetLinebreakInformationPacket GetMenusPacket GetPageBreakInformationPacket Glaisher GlobalClusteringCoefficient GlobalPreferences GlobalSession Glow GoldenRatio GompertzMakehamDistribution GoodmanKruskalGamma GoodmanKruskalGammaTest Goto Grad Gradient GradientFilter GradientOrientationFilter Graph GraphAssortativity GraphCenter GraphComplement GraphData GraphDensity GraphDiameter GraphDifference GraphDisjointUnion ' +
+ 'GraphDistance GraphDistanceMatrix GraphElementData GraphEmbedding GraphHighlight GraphHighlightStyle GraphHub Graphics Graphics3D Graphics3DBox Graphics3DBoxOptions GraphicsArray GraphicsBaseline GraphicsBox GraphicsBoxOptions GraphicsColor GraphicsColumn GraphicsComplex GraphicsComplex3DBox GraphicsComplex3DBoxOptions GraphicsComplexBox GraphicsComplexBoxOptions GraphicsContents GraphicsData GraphicsGrid GraphicsGridBox GraphicsGroup GraphicsGroup3DBox GraphicsGroup3DBoxOptions GraphicsGroupBox GraphicsGroupBoxOptions GraphicsGrouping GraphicsHighlightColor GraphicsRow GraphicsSpacing GraphicsStyle GraphIntersection GraphLayout GraphLinkEfficiency GraphPeriphery GraphPlot GraphPlot3D GraphPower GraphPropertyDistribution GraphQ GraphRadius GraphReciprocity GraphRoot GraphStyle GraphUnion Gray GrayLevel GreatCircleDistance Greater GreaterEqual GreaterEqualLess GreaterFullEqual GreaterGreater GreaterLess GreaterSlantEqual GreaterTilde Green Grid GridBaseline GridBox GridBoxAlignment GridBoxBackground GridBoxDividers GridBoxFrame GridBoxItemSize GridBoxItemStyle GridBoxOptions GridBoxSpacings GridCreationSettings GridDefaultElement GridElementStyleOptions GridFrame GridFrameMargins GridGraph GridLines GridLinesStyle GroebnerBasis GroupActionBase GroupCentralizer GroupElementFromWord GroupElementPosition GroupElementQ GroupElements GroupElementToWord GroupGenerators GroupMultiplicationTable GroupOrbits GroupOrder GroupPageBreakWithin GroupSetwiseStabilizer GroupStabilizer GroupStabilizerChain Gudermannian GumbelDistribution ' +
+ 'HaarWavelet HadamardMatrix HalfNormalDistribution HamiltonianGraphQ HammingDistance HammingWindow HankelH1 HankelH2 HankelMatrix HannPoissonWindow HannWindow HaradaNortonGroupHN HararyGraph HarmonicMean HarmonicMeanFilter HarmonicNumber Hash HashTable Haversine HazardFunction Head HeadCompose Heads HeavisideLambda HeavisidePi HeavisideTheta HeldGroupHe HeldPart HelpBrowserLookup HelpBrowserNotebook HelpBrowserSettings HermiteDecomposition HermiteH HermitianMatrixQ HessenbergDecomposition Hessian HexadecimalCharacter Hexahedron HexahedronBox HexahedronBoxOptions HiddenSurface HighlightGraph HighlightImage HighpassFilter HigmanSimsGroupHS HilbertFilter HilbertMatrix Histogram Histogram3D HistogramDistribution HistogramList HistogramTransform HistogramTransformInterpolation HitMissTransform HITSCentrality HodgeDual HoeffdingD HoeffdingDTest Hold HoldAll HoldAllComplete HoldComplete HoldFirst HoldForm HoldPattern HoldRest HolidayCalendar HomeDirectory HomePage Horizontal HorizontalForm HorizontalGauge HorizontalScrollPosition HornerForm HotellingTSquareDistribution HoytDistribution HTMLSave Hue HumpDownHump HumpEqual HurwitzLerchPhi HurwitzZeta HyperbolicDistribution HypercubeGraph HyperexponentialDistribution Hyperfactorial Hypergeometric0F1 Hypergeometric0F1Regularized Hypergeometric1F1 Hypergeometric1F1Regularized Hypergeometric2F1 Hypergeometric2F1Regularized HypergeometricDistribution HypergeometricPFQ HypergeometricPFQRegularized HypergeometricU Hyperlink HyperlinkCreationSettings Hyphenation HyphenationOptions HypoexponentialDistribution HypothesisTestData ' +
+ 'I Identity IdentityMatrix If IgnoreCase Im Image Image3D Image3DSlices ImageAccumulate ImageAdd ImageAdjust ImageAlign ImageApply ImageAspectRatio ImageAssemble ImageCache ImageCacheValid ImageCapture ImageChannels ImageClip ImageColorSpace ImageCompose ImageConvolve ImageCooccurrence ImageCorners ImageCorrelate ImageCorrespondingPoints ImageCrop ImageData ImageDataPacket ImageDeconvolve ImageDemosaic ImageDifference ImageDimensions ImageDistance ImageEffect ImageFeatureTrack ImageFileApply ImageFileFilter ImageFileScan ImageFilter ImageForestingComponents ImageForwardTransformation ImageHistogram ImageKeypoints ImageLevels ImageLines ImageMargins ImageMarkers ImageMeasurements ImageMultiply ImageOffset ImagePad ImagePadding ImagePartition ImagePeriodogram ImagePerspectiveTransformation ImageQ ImageRangeCache ImageReflect ImageRegion ImageResize ImageResolution ImageRotate ImageRotated ImageScaled ImageScan ImageSize ImageSizeAction ImageSizeCache ImageSizeMultipliers ImageSizeRaw ImageSubtract ImageTake ImageTransformation ImageTrim ImageType ImageValue ImageValuePositions Implies Import ImportAutoReplacements ImportString ImprovementImportance In IncidenceGraph IncidenceList IncidenceMatrix IncludeConstantBasis IncludeFileExtension IncludePods IncludeSingularTerm Increment Indent IndentingNewlineSpacings IndentMaxFraction IndependenceTest IndependentEdgeSetQ IndependentUnit IndependentVertexSetQ Indeterminate IndexCreationOptions Indexed IndexGraph IndexTag Inequality InexactNumberQ InexactNumbers Infinity Infix Information Inherited InheritScope Initialization InitializationCell InitializationCellEvaluation InitializationCellWarning InlineCounterAssignments InlineCounterIncrements InlineRules Inner Inpaint Input InputAliases InputAssumptions InputAutoReplacements InputField InputFieldBox InputFieldBoxOptions InputForm InputGrouping InputNamePacket InputNotebook InputPacket InputSettings InputStream InputString InputStringPacket InputToBoxFormPacket Insert InsertionPointObject InsertResults Inset Inset3DBox Inset3DBoxOptions InsetBox InsetBoxOptions Install InstallService InString Integer IntegerDigits IntegerExponent IntegerLength IntegerPart IntegerPartitions IntegerQ Integers IntegerString Integral Integrate Interactive InteractiveTradingChart Interlaced Interleaving InternallyBalancedDecomposition InterpolatingFunction InterpolatingPolynomial Interpolation InterpolationOrder InterpolationPoints InterpolationPrecision Interpretation InterpretationBox InterpretationBoxOptions InterpretationFunction ' +
+ 'InterpretTemplate InterquartileRange Interrupt InterruptSettings Intersection Interval IntervalIntersection IntervalMemberQ IntervalUnion Inverse InverseBetaRegularized InverseCDF InverseChiSquareDistribution InverseContinuousWaveletTransform InverseDistanceTransform InverseEllipticNomeQ InverseErf InverseErfc InverseFourier InverseFourierCosTransform InverseFourierSequenceTransform InverseFourierSinTransform InverseFourierTransform InverseFunction InverseFunctions InverseGammaDistribution InverseGammaRegularized InverseGaussianDistribution InverseGudermannian InverseHaversine InverseJacobiCD InverseJacobiCN InverseJacobiCS InverseJacobiDC InverseJacobiDN InverseJacobiDS InverseJacobiNC InverseJacobiND InverseJacobiNS InverseJacobiSC InverseJacobiSD InverseJacobiSN InverseLaplaceTransform InversePermutation InverseRadon InverseSeries InverseSurvivalFunction InverseWaveletTransform InverseWeierstrassP InverseZTransform Invisible InvisibleApplication InvisibleTimes IrreduciblePolynomialQ IsolatingInterval IsomorphicGraphQ IsotopeData Italic Item ItemBox ItemBoxOptions ItemSize ItemStyle ItoProcess ' +
+ 'JaccardDissimilarity JacobiAmplitude Jacobian JacobiCD JacobiCN JacobiCS JacobiDC JacobiDN JacobiDS JacobiNC JacobiND JacobiNS JacobiP JacobiSC JacobiSD JacobiSN JacobiSymbol JacobiZeta JankoGroupJ1 JankoGroupJ2 JankoGroupJ3 JankoGroupJ4 JarqueBeraALMTest JohnsonDistribution Join Joined JoinedCurve JoinedCurveBox JoinForm JordanDecomposition JordanModelDecomposition ' +
+ 'K KagiChart KaiserBesselWindow KaiserWindow KalmanEstimator KalmanFilter KarhunenLoeveDecomposition KaryTree KatzCentrality KCoreComponents KDistribution KelvinBei KelvinBer KelvinKei KelvinKer KendallTau KendallTauTest KernelExecute KernelMixtureDistribution KernelObject Kernels Ket Khinchin KirchhoffGraph KirchhoffMatrix KleinInvariantJ KnightTourGraph KnotData KnownUnitQ KolmogorovSmirnovTest KroneckerDelta KroneckerModelDecomposition KroneckerProduct KroneckerSymbol KuiperTest KumaraswamyDistribution Kurtosis KuwaharaFilter ' +
+ 'Label Labeled LabeledSlider LabelingFunction LabelStyle LaguerreL LambdaComponents LambertW LanczosWindow LandauDistribution Language LanguageCategory LaplaceDistribution LaplaceTransform Laplacian LaplacianFilter LaplacianGaussianFilter Large Larger Last Latitude LatitudeLongitude LatticeData LatticeReduce Launch LaunchKernels LayeredGraphPlot LayerSizeFunction LayoutInformation LCM LeafCount LeapYearQ LeastSquares LeastSquaresFilterKernel Left LeftArrow LeftArrowBar LeftArrowRightArrow LeftDownTeeVector LeftDownVector LeftDownVectorBar LeftRightArrow LeftRightVector LeftTee LeftTeeArrow LeftTeeVector LeftTriangle LeftTriangleBar LeftTriangleEqual LeftUpDownVector LeftUpTeeVector LeftUpVector LeftUpVectorBar LeftVector LeftVectorBar LegendAppearance Legended LegendFunction LegendLabel LegendLayout LegendMargins LegendMarkers LegendMarkerSize LegendreP LegendreQ LegendreType Length LengthWhile LerchPhi Less LessEqual LessEqualGreater LessFullEqual LessGreater LessLess LessSlantEqual LessTilde LetterCharacter LetterQ Level LeveneTest LeviCivitaTensor LevyDistribution Lexicographic LibraryFunction LibraryFunctionError LibraryFunctionInformation LibraryFunctionLoad LibraryFunctionUnload LibraryLoad LibraryUnload LicenseID LiftingFilterData LiftingWaveletTransform LightBlue LightBrown LightCyan Lighter LightGray LightGreen Lighting LightingAngle LightMagenta LightOrange LightPink LightPurple LightRed LightSources LightYellow Likelihood Limit LimitsPositioning LimitsPositioningTokens LindleyDistribution Line Line3DBox LinearFilter LinearFractionalTransform LinearModelFit LinearOffsetFunction LinearProgramming LinearRecurrence LinearSolve LinearSolveFunction LineBox LineBreak LinebreakAdjustments LineBreakChart LineBreakWithin LineColor LineForm LineGraph LineIndent LineIndentMaxFraction LineIntegralConvolutionPlot LineIntegralConvolutionScale LineLegend LineOpacity LineSpacing LineWrapParts LinkActivate LinkClose LinkConnect LinkConnectedQ LinkCreate LinkError LinkFlush LinkFunction LinkHost LinkInterrupt LinkLaunch LinkMode LinkObject LinkOpen LinkOptions LinkPatterns LinkProtocol LinkRead LinkReadHeld LinkReadyQ Links LinkWrite LinkWriteHeld LiouvilleLambda List Listable ListAnimate ListContourPlot ListContourPlot3D ListConvolve ListCorrelate ListCurvePathPlot ListDeconvolve ListDensityPlot Listen ListFourierSequenceTransform ListInterpolation ListLineIntegralConvolutionPlot ListLinePlot ListLogLinearPlot ListLogLogPlot ListLogPlot ListPicker ListPickerBox ListPickerBoxBackground ListPickerBoxOptions ListPlay ListPlot ListPlot3D ListPointPlot3D ListPolarPlot ListQ ListStreamDensityPlot ListStreamPlot ListSurfacePlot3D ListVectorDensityPlot ListVectorPlot ListVectorPlot3D ListZTransform Literal LiteralSearch LocalClusteringCoefficient LocalizeVariables LocationEquivalenceTest LocationTest Locator LocatorAutoCreate LocatorBox LocatorBoxOptions LocatorCentering LocatorPane LocatorPaneBox LocatorPaneBoxOptions ' +
+ 'LocatorRegion Locked Log Log10 Log2 LogBarnesG LogGamma LogGammaDistribution LogicalExpand LogIntegral LogisticDistribution LogitModelFit LogLikelihood LogLinearPlot LogLogisticDistribution LogLogPlot LogMultinormalDistribution LogNormalDistribution LogPlot LogRankTest LogSeriesDistribution LongEqual Longest LongestAscendingSequence LongestCommonSequence LongestCommonSequencePositions LongestCommonSubsequence LongestCommonSubsequencePositions LongestMatch LongForm Longitude LongLeftArrow LongLeftRightArrow LongRightArrow Loopback LoopFreeGraphQ LowerCaseQ LowerLeftArrow LowerRightArrow LowerTriangularize LowpassFilter LQEstimatorGains LQGRegulator LQOutputRegulatorGains LQRegulatorGains LUBackSubstitution LucasL LuccioSamiComponents LUDecomposition LyapunovSolve LyonsGroupLy ' +
+ 'MachineID MachineName MachineNumberQ MachinePrecision MacintoshSystemPageSetup Magenta Magnification Magnify MainSolve MaintainDynamicCaches Majority MakeBoxes MakeExpression MakeRules MangoldtLambda ManhattanDistance Manipulate Manipulator MannWhitneyTest MantissaExponent Manual Map MapAll MapAt MapIndexed MAProcess MapThread MarcumQ MardiaCombinedTest MardiaKurtosisTest MardiaSkewnessTest MarginalDistribution MarkovProcessProperties Masking MatchingDissimilarity MatchLocalNameQ MatchLocalNames MatchQ Material MathematicaNotation MathieuC MathieuCharacteristicA MathieuCharacteristicB MathieuCharacteristicExponent MathieuCPrime MathieuGroupM11 MathieuGroupM12 MathieuGroupM22 MathieuGroupM23 MathieuGroupM24 MathieuS MathieuSPrime MathMLForm MathMLText Matrices MatrixExp MatrixForm MatrixFunction MatrixLog MatrixPlot MatrixPower MatrixQ MatrixRank Max MaxBend MaxDetect MaxExtraBandwidths MaxExtraConditions MaxFeatures MaxFilter Maximize MaxIterations MaxMemoryUsed MaxMixtureKernels MaxPlotPoints MaxPoints MaxRecursion MaxStableDistribution MaxStepFraction MaxSteps MaxStepSize MaxValue MaxwellDistribution McLaughlinGroupMcL Mean MeanClusteringCoefficient MeanDegreeConnectivity MeanDeviation MeanFilter MeanGraphDistance MeanNeighborDegree MeanShift MeanShiftFilter Median MedianDeviation MedianFilter Medium MeijerG MeixnerDistribution MemberQ MemoryConstrained MemoryInUse Menu MenuAppearance MenuCommandKey MenuEvaluator MenuItem MenuPacket MenuSortingValue MenuStyle MenuView MergeDifferences Mesh MeshFunctions MeshRange MeshShading MeshStyle Message MessageDialog MessageList MessageName MessageOptions MessagePacket Messages MessagesNotebook MetaCharacters MetaInformation Method MethodOptions MexicanHatWavelet MeyerWavelet Min MinDetect MinFilter MinimalPolynomial MinimalStateSpaceModel Minimize Minors MinRecursion MinSize MinStableDistribution Minus MinusPlus MinValue Missing MissingDataMethod MittagLefflerE MixedRadix MixedRadixQuantity MixtureDistribution Mod Modal Mode Modular ModularLambda Module Modulus MoebiusMu Moment Momentary MomentConvert MomentEvaluate MomentGeneratingFunction Monday Monitor MonomialList MonomialOrder MonsterGroupM MorletWavelet MorphologicalBinarize MorphologicalBranchPoints MorphologicalComponents MorphologicalEulerNumber MorphologicalGraph MorphologicalPerimeter MorphologicalTransform Most MouseAnnotation MouseAppearance MouseAppearanceTag MouseButtons Mouseover MousePointerNote MousePosition MovingAverage MovingMedian MoyalDistribution MultiedgeStyle MultilaunchWarning MultiLetterItalics MultiLetterStyle MultilineFunction Multinomial MultinomialDistribution MultinormalDistribution MultiplicativeOrder Multiplicity Multiselection MultivariateHypergeometricDistribution MultivariatePoissonDistribution MultivariateTDistribution ' +
+ 'N NakagamiDistribution NameQ Names NamespaceBox Nand NArgMax NArgMin NBernoulliB NCache NDSolve NDSolveValue Nearest NearestFunction NeedCurrentFrontEndPackagePacket NeedCurrentFrontEndSymbolsPacket NeedlemanWunschSimilarity Needs Negative NegativeBinomialDistribution NegativeMultinomialDistribution NeighborhoodGraph Nest NestedGreaterGreater NestedLessLess NestedScriptRules NestList NestWhile NestWhileList NevilleThetaC NevilleThetaD NevilleThetaN NevilleThetaS NewPrimitiveStyle NExpectation Next NextPrime NHoldAll NHoldFirst NHoldRest NicholsGridLines NicholsPlot NIntegrate NMaximize NMaxValue NMinimize NMinValue NominalVariables NonAssociative NoncentralBetaDistribution NoncentralChiSquareDistribution NoncentralFRatioDistribution NoncentralStudentTDistribution NonCommutativeMultiply NonConstants None NonlinearModelFit NonlocalMeansFilter NonNegative NonPositive Nor NorlundB Norm Normal NormalDistribution NormalGrouping Normalize NormalizedSquaredEuclideanDistance NormalsFunction NormFunction Not NotCongruent NotCupCap NotDoubleVerticalBar Notebook NotebookApply NotebookAutoSave NotebookClose NotebookConvertSettings NotebookCreate NotebookCreateReturnObject NotebookDefault NotebookDelete NotebookDirectory NotebookDynamicExpression NotebookEvaluate NotebookEventActions NotebookFileName NotebookFind NotebookFindReturnObject NotebookGet NotebookGetLayoutInformationPacket NotebookGetMisspellingsPacket NotebookInformation NotebookInterfaceObject NotebookLocate NotebookObject NotebookOpen NotebookOpenReturnObject NotebookPath NotebookPrint NotebookPut NotebookPutReturnObject NotebookRead NotebookResetGeneratedCells Notebooks NotebookSave NotebookSaveAs NotebookSelection NotebookSetupLayoutInformationPacket NotebooksMenu NotebookWrite NotElement NotEqualTilde NotExists NotGreater NotGreaterEqual NotGreaterFullEqual NotGreaterGreater NotGreaterLess NotGreaterSlantEqual NotGreaterTilde NotHumpDownHump NotHumpEqual NotLeftTriangle NotLeftTriangleBar NotLeftTriangleEqual NotLess NotLessEqual NotLessFullEqual NotLessGreater NotLessLess NotLessSlantEqual NotLessTilde NotNestedGreaterGreater NotNestedLessLess NotPrecedes NotPrecedesEqual NotPrecedesSlantEqual NotPrecedesTilde NotReverseElement NotRightTriangle NotRightTriangleBar NotRightTriangleEqual NotSquareSubset NotSquareSubsetEqual NotSquareSuperset NotSquareSupersetEqual NotSubset NotSubsetEqual NotSucceeds NotSucceedsEqual NotSucceedsSlantEqual NotSucceedsTilde NotSuperset NotSupersetEqual NotTilde NotTildeEqual NotTildeFullEqual NotTildeTilde NotVerticalBar NProbability NProduct NProductFactors NRoots NSolve NSum NSumTerms Null NullRecords NullSpace NullWords Number NumberFieldClassNumber NumberFieldDiscriminant NumberFieldFundamentalUnits NumberFieldIntegralBasis NumberFieldNormRepresentatives NumberFieldRegulator NumberFieldRootsOfUnity NumberFieldSignature NumberForm NumberFormat NumberMarks NumberMultiplier NumberPadding NumberPoint NumberQ NumberSeparator ' +
+ 'NumberSigns NumberString Numerator NumericFunction NumericQ NuttallWindow NValues NyquistGridLines NyquistPlot ' +
+ 'O ObservabilityGramian ObservabilityMatrix ObservableDecomposition ObservableModelQ OddQ Off Offset OLEData On ONanGroupON OneIdentity Opacity Open OpenAppend Opener OpenerBox OpenerBoxOptions OpenerView OpenFunctionInspectorPacket Opening OpenRead OpenSpecialOptions OpenTemporary OpenWrite Operate OperatingSystem OptimumFlowData Optional OptionInspectorSettings OptionQ Options OptionsPacket OptionsPattern OptionValue OptionValueBox OptionValueBoxOptions Or Orange Order OrderDistribution OrderedQ Ordering Orderless OrnsteinUhlenbeckProcess Orthogonalize Out Outer OutputAutoOverwrite OutputControllabilityMatrix OutputControllableModelQ OutputForm OutputFormData OutputGrouping OutputMathEditExpression OutputNamePacket OutputResponse OutputSizeLimit OutputStream Over OverBar OverDot Overflow OverHat Overlaps Overlay OverlayBox OverlayBoxOptions Overscript OverscriptBox OverscriptBoxOptions OverTilde OverVector OwenT OwnValues ' +
+ 'PackingMethod PaddedForm Padding PadeApproximant PadLeft PadRight PageBreakAbove PageBreakBelow PageBreakWithin PageFooterLines PageFooters PageHeaderLines PageHeaders PageHeight PageRankCentrality PageWidth PairedBarChart PairedHistogram PairedSmoothHistogram PairedTTest PairedZTest PaletteNotebook PalettePath Pane PaneBox PaneBoxOptions Panel PanelBox PanelBoxOptions Paneled PaneSelector PaneSelectorBox PaneSelectorBoxOptions PaperWidth ParabolicCylinderD ParagraphIndent ParagraphSpacing ParallelArray ParallelCombine ParallelDo ParallelEvaluate Parallelization Parallelize ParallelMap ParallelNeeds ParallelProduct ParallelSubmit ParallelSum ParallelTable ParallelTry Parameter ParameterEstimator ParameterMixtureDistribution ParameterVariables ParametricFunction ParametricNDSolve ParametricNDSolveValue ParametricPlot ParametricPlot3D ParentConnect ParentDirectory ParentForm Parenthesize ParentList ParetoDistribution Part PartialCorrelationFunction PartialD ParticleData Partition PartitionsP PartitionsQ ParzenWindow PascalDistribution PassEventsDown PassEventsUp Paste PasteBoxFormInlineCells PasteButton Path PathGraph PathGraphQ Pattern PatternSequence PatternTest PauliMatrix PaulWavelet Pause PausedTime PDF PearsonChiSquareTest PearsonCorrelationTest PearsonDistribution PerformanceGoal PeriodicInterpolation Periodogram PeriodogramArray PermutationCycles PermutationCyclesQ PermutationGroup PermutationLength PermutationList PermutationListQ PermutationMax PermutationMin PermutationOrder PermutationPower PermutationProduct PermutationReplace Permutations PermutationSupport Permute PeronaMalikFilter Perpendicular PERTDistribution PetersenGraph PhaseMargins Pi Pick PIDData PIDDerivativeFilter PIDFeedforward PIDTune Piecewise PiecewiseExpand PieChart PieChart3D PillaiTrace PillaiTraceTest Pink Pivoting PixelConstrained PixelValue PixelValuePositions Placed Placeholder PlaceholderReplace Plain PlanarGraphQ Play PlayRange Plot Plot3D Plot3Matrix PlotDivision PlotJoined PlotLabel PlotLayout PlotLegends PlotMarkers PlotPoints PlotRange PlotRangeClipping PlotRangePadding PlotRegion PlotStyle Plus PlusMinus Pochhammer PodStates PodWidth Point Point3DBox PointBox PointFigureChart PointForm PointLegend PointSize PoissonConsulDistribution PoissonDistribution PoissonProcess PoissonWindow PolarAxes PolarAxesOrigin PolarGridLines PolarPlot PolarTicks PoleZeroMarkers PolyaAeppliDistribution PolyGamma Polygon Polygon3DBox Polygon3DBoxOptions PolygonBox PolygonBoxOptions PolygonHoleScale PolygonIntersections PolygonScale PolyhedronData PolyLog PolynomialExtendedGCD PolynomialForm PolynomialGCD PolynomialLCM PolynomialMod PolynomialQ PolynomialQuotient PolynomialQuotientRemainder PolynomialReduce PolynomialRemainder Polynomials PopupMenu PopupMenuBox PopupMenuBoxOptions PopupView PopupWindow Position Positive PositiveDefiniteMatrixQ PossibleZeroQ Postfix PostScript Power PowerDistribution PowerExpand PowerMod PowerModList ' +
+ 'PowerSpectralDensity PowersRepresentations PowerSymmetricPolynomial Precedence PrecedenceForm Precedes PrecedesEqual PrecedesSlantEqual PrecedesTilde Precision PrecisionGoal PreDecrement PredictionRoot PreemptProtect PreferencesPath Prefix PreIncrement Prepend PrependTo PreserveImageOptions Previous PriceGraphDistribution PrimaryPlaceholder Prime PrimeNu PrimeOmega PrimePi PrimePowerQ PrimeQ Primes PrimeZetaP PrimitiveRoot PrincipalComponents PrincipalValue Print PrintAction PrintForm PrintingCopies PrintingOptions PrintingPageRange PrintingStartingPageNumber PrintingStyleEnvironment PrintPrecision PrintTemporary Prism PrismBox PrismBoxOptions PrivateCellOptions PrivateEvaluationOptions PrivateFontOptions PrivateFrontEndOptions PrivateNotebookOptions PrivatePaths Probability ProbabilityDistribution ProbabilityPlot ProbabilityPr ProbabilityScalePlot ProbitModelFit ProcessEstimator ProcessParameterAssumptions ProcessParameterQ ProcessStateDomain ProcessTimeDomain Product ProductDistribution ProductLog ProgressIndicator ProgressIndicatorBox ProgressIndicatorBoxOptions Projection Prolog PromptForm Properties Property PropertyList PropertyValue Proportion Proportional Protect Protected ProteinData Pruning PseudoInverse Purple Put PutAppend Pyramid PyramidBox PyramidBoxOptions ' +
+ 'QBinomial QFactorial QGamma QHypergeometricPFQ QPochhammer QPolyGamma QRDecomposition QuadraticIrrationalQ Quantile QuantilePlot Quantity QuantityForm QuantityMagnitude QuantityQ QuantityUnit Quartics QuartileDeviation Quartiles QuartileSkewness QueueingNetworkProcess QueueingProcess QueueProperties Quiet Quit Quotient QuotientRemainder ' +
+ 'RadialityCentrality RadicalBox RadicalBoxOptions RadioButton RadioButtonBar RadioButtonBox RadioButtonBoxOptions Radon RamanujanTau RamanujanTauL RamanujanTauTheta RamanujanTauZ Random RandomChoice RandomComplex RandomFunction RandomGraph RandomImage RandomInteger RandomPermutation RandomPrime RandomReal RandomSample RandomSeed RandomVariate RandomWalkProcess Range RangeFilter RangeSpecification RankedMax RankedMin Raster Raster3D Raster3DBox Raster3DBoxOptions RasterArray RasterBox RasterBoxOptions Rasterize RasterSize Rational RationalFunctions Rationalize Rationals Ratios Raw RawArray RawBoxes RawData RawMedium RayleighDistribution Re Read ReadList ReadProtected Real RealBlockDiagonalForm RealDigits RealExponent Reals Reap Record RecordLists RecordSeparators Rectangle RectangleBox RectangleBoxOptions RectangleChart RectangleChart3D RecurrenceFilter RecurrenceTable RecurringDigitsForm Red Reduce RefBox ReferenceLineStyle ReferenceMarkers ReferenceMarkerStyle Refine ReflectionMatrix ReflectionTransform Refresh RefreshRate RegionBinarize RegionFunction RegionPlot RegionPlot3D RegularExpression Regularization Reinstall Release ReleaseHold ReliabilityDistribution ReliefImage ReliefPlot Remove RemoveAlphaChannel RemoveAsynchronousTask Removed RemoveInputStreamMethod RemoveOutputStreamMethod RemoveProperty RemoveScheduledTask RenameDirectory RenameFile RenderAll RenderingOptions RenewalProcess RenkoChart Repeated RepeatedNull RepeatedString Replace ReplaceAll ReplaceHeldPart ReplaceImageValue ReplaceList ReplacePart ReplacePixelValue ReplaceRepeated Resampling Rescale RescalingTransform ResetDirectory ResetMenusPacket ResetScheduledTask Residue Resolve Rest Resultant ResumePacket Return ReturnExpressionPacket ReturnInputFormPacket ReturnPacket ReturnTextPacket Reverse ReverseBiorthogonalSplineWavelet ReverseElement ReverseEquilibrium ReverseGraph ReverseUpEquilibrium RevolutionAxis RevolutionPlot3D RGBColor RiccatiSolve RiceDistribution RidgeFilter RiemannR RiemannSiegelTheta RiemannSiegelZ Riffle Right RightArrow RightArrowBar RightArrowLeftArrow RightCosetRepresentative RightDownTeeVector RightDownVector RightDownVectorBar RightTee RightTeeArrow RightTeeVector RightTriangle RightTriangleBar RightTriangleEqual RightUpDownVector RightUpTeeVector RightUpVector RightUpVectorBar RightVector RightVectorBar RiskAchievementImportance RiskReductionImportance RogersTanimotoDissimilarity Root RootApproximant RootIntervals RootLocusPlot RootMeanSquare RootOfUnityQ RootReduce Roots RootSum Rotate RotateLabel RotateLeft RotateRight RotationAction RotationBox RotationBoxOptions RotationMatrix RotationTransform Round RoundImplies RoundingRadius Row RowAlignments RowBackgrounds RowBox RowHeights RowLines RowMinHeight RowReduce RowsEqual RowSpacings RSolve RudvalisGroupRu Rule RuleCondition RuleDelayed RuleForm RulerUnits Run RunScheduledTask RunThrough RuntimeAttributes RuntimeOptions RussellRaoDissimilarity ' +
+ 'SameQ SameTest SampleDepth SampledSoundFunction SampledSoundList SampleRate SamplingPeriod SARIMAProcess SARMAProcess SatisfiabilityCount SatisfiabilityInstances SatisfiableQ Saturday Save Saveable SaveAutoDelete SaveDefinitions SawtoothWave Scale Scaled ScaleDivisions ScaledMousePosition ScaleOrigin ScalePadding ScaleRanges ScaleRangeStyle ScalingFunctions ScalingMatrix ScalingTransform Scan ScheduledTaskActiveQ ScheduledTaskData ScheduledTaskObject ScheduledTasks SchurDecomposition ScientificForm ScreenRectangle ScreenStyleEnvironment ScriptBaselineShifts ScriptLevel ScriptMinSize ScriptRules ScriptSizeMultipliers Scrollbars ScrollingOptions ScrollPosition Sec Sech SechDistribution SectionGrouping SectorChart SectorChart3D SectorOrigin SectorSpacing SeedRandom Select Selectable SelectComponents SelectedCells SelectedNotebook Selection SelectionAnimate SelectionCell SelectionCellCreateCell SelectionCellDefaultStyle SelectionCellParentStyle SelectionCreateCell SelectionDebuggerTag SelectionDuplicateCell SelectionEvaluate SelectionEvaluateCreateCell SelectionMove SelectionPlaceholder SelectionSetStyle SelectWithContents SelfLoops SelfLoopStyle SemialgebraicComponentInstances SendMail Sequence SequenceAlignment SequenceForm SequenceHold SequenceLimit Series SeriesCoefficient SeriesData SessionTime Set SetAccuracy SetAlphaChannel SetAttributes Setbacks SetBoxFormNamesPacket SetDelayed SetDirectory SetEnvironment SetEvaluationNotebook SetFileDate SetFileLoadingContext SetNotebookStatusLine SetOptions SetOptionsPacket SetPrecision SetProperty SetSelectedNotebook SetSharedFunction SetSharedVariable SetSpeechParametersPacket SetStreamPosition SetSystemOptions Setter SetterBar SetterBox SetterBoxOptions Setting SetValue Shading Shallow ShannonWavelet ShapiroWilkTest Share Sharpen ShearingMatrix ShearingTransform ShenCastanMatrix Short ShortDownArrow Shortest ShortestMatch ShortestPathFunction ShortLeftArrow ShortRightArrow ShortUpArrow Show ShowAutoStyles ShowCellBracket ShowCellLabel ShowCellTags ShowClosedCellArea ShowContents ShowControls ShowCursorTracker ShowGroupOpenCloseIcon ShowGroupOpener ShowInvisibleCharacters ShowPageBreaks ShowPredictiveInterface ShowSelection ShowShortBoxForm ShowSpecialCharacters ShowStringCharacters ShowSyntaxStyles ShrinkingDelay ShrinkWrapBoundingBox SiegelTheta SiegelTukeyTest Sign Signature SignedRankTest SignificanceLevel SignPadding SignTest SimilarityRules SimpleGraph SimpleGraphQ Simplify Sin Sinc SinghMaddalaDistribution SingleEvaluation SingleLetterItalics SingleLetterStyle SingularValueDecomposition SingularValueList SingularValuePlot SingularValues Sinh SinhIntegral SinIntegral SixJSymbol Skeleton SkeletonTransform SkellamDistribution Skewness SkewNormalDistribution Skip SliceDistribution Slider Slider2D Slider2DBox Slider2DBoxOptions SliderBox SliderBoxOptions SlideView Slot SlotSequence Small SmallCircle Smaller SmithDelayCompensator SmithWatermanSimilarity ' +
+ 'SmoothDensityHistogram SmoothHistogram SmoothHistogram3D SmoothKernelDistribution SocialMediaData Socket SokalSneathDissimilarity Solve SolveAlways SolveDelayed Sort SortBy Sound SoundAndGraphics SoundNote SoundVolume Sow Space SpaceForm Spacer Spacings Span SpanAdjustments SpanCharacterRounding SpanFromAbove SpanFromBoth SpanFromLeft SpanLineThickness SpanMaxSize SpanMinSize SpanningCharacters SpanSymmetric SparseArray SpatialGraphDistribution Speak SpeakTextPacket SpearmanRankTest SpearmanRho Spectrogram SpectrogramArray Specularity SpellingCorrection SpellingDictionaries SpellingDictionariesPath SpellingOptions SpellingSuggestionsPacket Sphere SphereBox SphericalBesselJ SphericalBesselY SphericalHankelH1 SphericalHankelH2 SphericalHarmonicY SphericalPlot3D SphericalRegion SpheroidalEigenvalue SpheroidalJoiningFactor SpheroidalPS SpheroidalPSPrime SpheroidalQS SpheroidalQSPrime SpheroidalRadialFactor SpheroidalS1 SpheroidalS1Prime SpheroidalS2 SpheroidalS2Prime Splice SplicedDistribution SplineClosed SplineDegree SplineKnots SplineWeights Split SplitBy SpokenString Sqrt SqrtBox SqrtBoxOptions Square SquaredEuclideanDistance SquareFreeQ SquareIntersection SquaresR SquareSubset SquareSubsetEqual SquareSuperset SquareSupersetEqual SquareUnion SquareWave StabilityMargins StabilityMarginsStyle StableDistribution Stack StackBegin StackComplete StackInhibit StandardDeviation StandardDeviationFilter StandardForm Standardize StandbyDistribution Star StarGraph StartAsynchronousTask StartingStepSize StartOfLine StartOfString StartScheduledTask StartupSound StateDimensions StateFeedbackGains StateOutputEstimator StateResponse StateSpaceModel StateSpaceRealization StateSpaceTransform StationaryDistribution StationaryWaveletPacketTransform StationaryWaveletTransform StatusArea StatusCentrality StepMonitor StieltjesGamma StirlingS1 StirlingS2 StopAsynchronousTask StopScheduledTask StrataVariables StratonovichProcess StreamColorFunction StreamColorFunctionScaling StreamDensityPlot StreamPlot StreamPoints StreamPosition Streams StreamScale StreamStyle String StringBreak StringByteCount StringCases StringCount StringDrop StringExpression StringForm StringFormat StringFreeQ StringInsert StringJoin StringLength StringMatchQ StringPosition StringQ StringReplace StringReplaceList StringReplacePart StringReverse StringRotateLeft StringRotateRight StringSkeleton StringSplit StringTake StringToStream StringTrim StripBoxes StripOnInput StripWrapperBoxes StrokeForm StructuralImportance StructuredArray StructuredSelection StruveH StruveL Stub StudentTDistribution Style StyleBox StyleBoxAutoDelete StyleBoxOptions StyleData StyleDefinitions StyleForm StyleKeyMapping StyleMenuListing StyleNameDialogSettings StyleNames StylePrint StyleSheetPath Subfactorial Subgraph SubMinus SubPlus SubresultantPolynomialRemainders ' +
+ 'SubresultantPolynomials Subresultants Subscript SubscriptBox SubscriptBoxOptions Subscripted Subset SubsetEqual Subsets SubStar Subsuperscript SubsuperscriptBox SubsuperscriptBoxOptions Subtract SubtractFrom SubValues Succeeds SucceedsEqual SucceedsSlantEqual SucceedsTilde SuchThat Sum SumConvergence Sunday SuperDagger SuperMinus SuperPlus Superscript SuperscriptBox SuperscriptBoxOptions Superset SupersetEqual SuperStar Surd SurdForm SurfaceColor SurfaceGraphics SurvivalDistribution SurvivalFunction SurvivalModel SurvivalModelFit SuspendPacket SuzukiDistribution SuzukiGroupSuz SwatchLegend Switch Symbol SymbolName SymletWavelet Symmetric SymmetricGroup SymmetricMatrixQ SymmetricPolynomial SymmetricReduction Symmetrize SymmetrizedArray SymmetrizedArrayRules SymmetrizedDependentComponents SymmetrizedIndependentComponents SymmetrizedReplacePart SynchronousInitialization SynchronousUpdating Syntax SyntaxForm SyntaxInformation SyntaxLength SyntaxPacket SyntaxQ SystemDialogInput SystemException SystemHelpPath SystemInformation SystemInformationData SystemOpen SystemOptions SystemsModelDelay SystemsModelDelayApproximate SystemsModelDelete SystemsModelDimensions SystemsModelExtract SystemsModelFeedbackConnect SystemsModelLabels SystemsModelOrder SystemsModelParallelConnect SystemsModelSeriesConnect SystemsModelStateFeedbackConnect SystemStub ' +
+ 'Tab TabFilling Table TableAlignments TableDepth TableDirections TableForm TableHeadings TableSpacing TableView TableViewBox TabSpacings TabView TabViewBox TabViewBoxOptions TagBox TagBoxNote TagBoxOptions TaggingRules TagSet TagSetDelayed TagStyle TagUnset Take TakeWhile Tally Tan Tanh TargetFunctions TargetUnits TautologyQ TelegraphProcess TemplateBox TemplateBoxOptions TemplateSlotSequence TemporalData Temporary TemporaryVariable TensorContract TensorDimensions TensorExpand TensorProduct TensorQ TensorRank TensorReduce TensorSymmetry TensorTranspose TensorWedge Tetrahedron TetrahedronBox TetrahedronBoxOptions TeXForm TeXSave Text Text3DBox Text3DBoxOptions TextAlignment TextBand TextBoundingBox TextBox TextCell TextClipboardType TextData TextForm TextJustification TextLine TextPacket TextParagraph TextRecognize TextRendering TextStyle Texture TextureCoordinateFunction TextureCoordinateScaling Therefore ThermometerGauge Thick Thickness Thin Thinning ThisLink ThompsonGroupTh Thread ThreeJSymbol Threshold Through Throw Thumbnail Thursday Ticks TicksStyle Tilde TildeEqual TildeFullEqual TildeTilde TimeConstrained TimeConstraint Times TimesBy TimeSeriesForecast TimeSeriesInvertibility TimeUsed TimeValue TimeZone Timing Tiny TitleGrouping TitsGroupT ToBoxes ToCharacterCode ToColor ToContinuousTimeModel ToDate ToDiscreteTimeModel ToeplitzMatrix ToExpression ToFileName Together Toggle ToggleFalse Toggler TogglerBar TogglerBox TogglerBoxOptions ToHeldExpression ToInvertibleTimeSeries TokenWords Tolerance ToLowerCase ToNumberField TooBig Tooltip TooltipBox TooltipBoxOptions TooltipDelay TooltipStyle Top TopHatTransform TopologicalSort ToRadicals ToRules ToString Total TotalHeight TotalVariationFilter TotalWidth TouchscreenAutoZoom TouchscreenControlPlacement ToUpperCase Tr Trace TraceAbove TraceAction TraceBackward TraceDepth TraceDialog TraceForward TraceInternal TraceLevel TraceOff TraceOn TraceOriginal TracePrint TraceScan TrackedSymbols TradingChart TraditionalForm TraditionalFunctionNotation TraditionalNotation TraditionalOrder TransferFunctionCancel TransferFunctionExpand TransferFunctionFactor TransferFunctionModel TransferFunctionPoles TransferFunctionTransform TransferFunctionZeros TransformationFunction TransformationFunctions TransformationMatrix TransformedDistribution TransformedField Translate TranslationTransform TransparentColor Transpose TreeForm TreeGraph TreeGraphQ TreePlot TrendStyle TriangleWave TriangularDistribution Trig TrigExpand TrigFactor TrigFactorList Trigger TrigReduce TrigToExp TrimmedMean True TrueQ TruncatedDistribution TsallisQExponentialDistribution TsallisQGaussianDistribution TTest Tube TubeBezierCurveBox TubeBezierCurveBoxOptions TubeBox TubeBSplineCurveBox TubeBSplineCurveBoxOptions Tuesday TukeyLambdaDistribution TukeyWindow Tuples TuranGraph TuringMachine ' +
+ 'Transparent ' +
+ 'UnateQ Uncompress Undefined UnderBar Underflow Underlined Underoverscript UnderoverscriptBox UnderoverscriptBoxOptions Underscript UnderscriptBox UnderscriptBoxOptions UndirectedEdge UndirectedGraph UndirectedGraphQ UndocumentedTestFEParserPacket UndocumentedTestGetSelectionPacket Unequal Unevaluated UniformDistribution UniformGraphDistribution UniformSumDistribution Uninstall Union UnionPlus Unique UnitBox UnitConvert UnitDimensions Unitize UnitRootTest UnitSimplify UnitStep UnitTriangle UnitVector Unprotect UnsameQ UnsavedVariables Unset UnsetShared UntrackedVariables Up UpArrow UpArrowBar UpArrowDownArrow Update UpdateDynamicObjects UpdateDynamicObjectsSynchronous UpdateInterval UpDownArrow UpEquilibrium UpperCaseQ UpperLeftArrow UpperRightArrow UpperTriangularize Upsample UpSet UpSetDelayed UpTee UpTeeArrow UpValues URL URLFetch URLFetchAsynchronous URLSave URLSaveAsynchronous UseGraphicsRange Using UsingFrontEnd ' +
+ 'V2Get ValidationLength Value ValueBox ValueBoxOptions ValueForm ValueQ ValuesData Variables Variance VarianceEquivalenceTest VarianceEstimatorFunction VarianceGammaDistribution VarianceTest VectorAngle VectorColorFunction VectorColorFunctionScaling VectorDensityPlot VectorGlyphData VectorPlot VectorPlot3D VectorPoints VectorQ Vectors VectorScale VectorStyle Vee Verbatim Verbose VerboseConvertToPostScriptPacket VerifyConvergence VerifySolutions VerifyTestAssumptions Version VersionNumber VertexAdd VertexCapacity VertexColors VertexComponent VertexConnectivity VertexCoordinateRules VertexCoordinates VertexCorrelationSimilarity VertexCosineSimilarity VertexCount VertexCoverQ VertexDataCoordinates VertexDegree VertexDelete VertexDiceSimilarity VertexEccentricity VertexInComponent VertexInDegree VertexIndex VertexJaccardSimilarity VertexLabeling VertexLabels VertexLabelStyle VertexList VertexNormals VertexOutComponent VertexOutDegree VertexQ VertexRenderingFunction VertexReplace VertexShape VertexShapeFunction VertexSize VertexStyle VertexTextureCoordinates VertexWeight Vertical VerticalBar VerticalForm VerticalGauge VerticalSeparator VerticalSlider VerticalTilde ViewAngle ViewCenter ViewMatrix ViewPoint ViewPointSelectorSettings ViewPort ViewRange ViewVector ViewVertical VirtualGroupData Visible VisibleCell VoigtDistribution VonMisesDistribution ' +
+ 'WaitAll WaitAsynchronousTask WaitNext WaitUntil WakebyDistribution WalleniusHypergeometricDistribution WaringYuleDistribution WatershedComponents WatsonUSquareTest WattsStrogatzGraphDistribution WaveletBestBasis WaveletFilterCoefficients WaveletImagePlot WaveletListPlot WaveletMapIndexed WaveletMatrixPlot WaveletPhi WaveletPsi WaveletScale WaveletScalogram WaveletThreshold WeaklyConnectedComponents WeaklyConnectedGraphQ WeakStationarity WeatherData WeberE Wedge Wednesday WeibullDistribution WeierstrassHalfPeriods WeierstrassInvariants WeierstrassP WeierstrassPPrime WeierstrassSigma WeierstrassZeta WeightedAdjacencyGraph WeightedAdjacencyMatrix WeightedData WeightedGraphQ Weights WelchWindow WheelGraph WhenEvent Which While White Whitespace WhitespaceCharacter WhittakerM WhittakerW WienerFilter WienerProcess WignerD WignerSemicircleDistribution WilksW WilksWTest WindowClickSelect WindowElements WindowFloating WindowFrame WindowFrameElements WindowMargins WindowMovable WindowOpacity WindowSelected WindowSize WindowStatusArea WindowTitle WindowToolbars WindowWidth With WolframAlpha WolframAlphaDate WolframAlphaQuantity WolframAlphaResult Word WordBoundary WordCharacter WordData WordSearch WordSeparators WorkingPrecision Write WriteString Wronskian ' +
+ 'XMLElement XMLObject Xnor Xor ' +
+ 'Yellow YuleDissimilarity ' +
+ 'ZernikeR ZeroSymmetric ZeroTest ZeroWidthTimes Zeta ZetaZero ZipfDistribution ZTest ZTransform ' +
+ '$Aborted $ActivationGroupID $ActivationKey $ActivationUserRegistered $AddOnsDirectory $AssertFunction $Assumptions $AsynchronousTask $BaseDirectory $BatchInput $BatchOutput $BoxForms $ByteOrdering $Canceled $CharacterEncoding $CharacterEncodings $CommandLine $CompilationTarget $ConditionHold $ConfiguredKernels $Context $ContextPath $ControlActiveSetting $CreationDate $CurrentLink $DateStringFormat $DefaultFont $DefaultFrontEnd $DefaultImagingDevice $DefaultPath $Display $DisplayFunction $DistributedContexts $DynamicEvaluation $Echo $Epilog $ExportFormats $Failed $FinancialDataSource $FormatType $FrontEnd $FrontEndSession $GeoLocation $HistoryLength $HomeDirectory $HTTPCookies $IgnoreEOF $ImagingDevices $ImportFormats $InitialDirectory $Input $InputFileName $InputStreamMethods $Inspector $InstallationDate $InstallationDirectory $InterfaceEnvironment $IterationLimit $KernelCount $KernelID $Language $LaunchDirectory $LibraryPath $LicenseExpirationDate $LicenseID $LicenseProcesses $LicenseServer $LicenseSubprocesses $LicenseType $Line $Linked $LinkSupported $LoadedFiles $MachineAddresses $MachineDomain $MachineDomains $MachineEpsilon $MachineID $MachineName $MachinePrecision $MachineType $MaxExtraPrecision $MaxLicenseProcesses $MaxLicenseSubprocesses $MaxMachineNumber $MaxNumber $MaxPiecewiseCases $MaxPrecision $MaxRootDegree $MessageGroups $MessageList $MessagePrePrint $Messages $MinMachineNumber $MinNumber $MinorReleaseNumber $MinPrecision $ModuleNumber $NetworkLicense $NewMessage $NewSymbol $Notebooks $NumberMarks $Off $OperatingSystem $Output $OutputForms $OutputSizeLimit $OutputStreamMethods $Packages $ParentLink $ParentProcessID $PasswordFile $PatchLevelID $Path $PathnameSeparator $PerformanceGoal $PipeSupported $Post $Pre $PreferencesDirectory $PrePrint $PreRead $PrintForms $PrintLiteral $ProcessID $ProcessorCount $ProcessorType $ProductInformation $ProgramName $RandomState $RecursionLimit $ReleaseNumber $RootDirectory $ScheduledTask $ScriptCommandLine $SessionID $SetParentLink $SharedFunctions $SharedVariables $SoundDisplay $SoundDisplayFunction $SuppressInputFormHeads $SynchronousEvaluation $SyntaxHandler $System $SystemCharacterEncoding $SystemID $SystemWordLength $TemporaryDirectory $TemporaryPrefix $TextStyle $TimedOut $TimeUnit $TimeZone $TopDirectory $TraceOff $TraceOn $TracePattern $TracePostAction $TracePreAction $Urgent $UserAddOnsDirectory $UserBaseDirectory $UserDocumentsDirectory $UserName $Version $VersionNumber',
+ contains: [
+ {
+ className: 'comment',
+ begin: /\(\*/, end: /\*\)/
+ },
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.C_NUMBER_MODE,
+ {
+ begin: /\{/, end: /\}/,
+ illegal: /:/
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("matlab",
+/*
+Language: Matlab
+Author: Denis Bardadym <bardadymchik@gmail.com>
+Contributors: Eugene Nizhibitsky <nizhibitsky@ya.ru>
+Category: scientific
+*/
+
+function(hljs) {
+ var COMMON_CONTAINS = [
+ hljs.C_NUMBER_MODE,
+ {
+ className: 'string',
+ begin: '\'', end: '\'',
+ contains: [hljs.BACKSLASH_ESCAPE, {begin: '\'\''}]
+ }
+ ];
+ var TRANSPOSE = {
+ relevance: 0,
+ contains: [
+ {
+ begin: /'['\.]*/
+ }
+ ]
+ };
+
+ return {
+ keywords: {
+ keyword:
+ 'break case catch classdef continue else elseif end enumerated events for function ' +
+ 'global if methods otherwise parfor persistent properties return spmd switch try while',
+ built_in:
+ 'sin sind sinh asin asind asinh cos cosd cosh acos acosd acosh tan tand tanh atan ' +
+ 'atand atan2 atanh sec secd sech asec asecd asech csc cscd csch acsc acscd acsch cot ' +
+ 'cotd coth acot acotd acoth hypot exp expm1 log log1p log10 log2 pow2 realpow reallog ' +
+ 'realsqrt sqrt nthroot nextpow2 abs angle complex conj imag real unwrap isreal ' +
+ 'cplxpair fix floor ceil round mod rem sign airy besselj bessely besselh besseli ' +
+ 'besselk beta betainc betaln ellipj ellipke erf erfc erfcx erfinv expint gamma ' +
+ 'gammainc gammaln psi legendre cross dot factor isprime primes gcd lcm rat rats perms ' +
+ 'nchoosek factorial cart2sph cart2pol pol2cart sph2cart hsv2rgb rgb2hsv zeros ones ' +
+ 'eye repmat rand randn linspace logspace freqspace meshgrid accumarray size length ' +
+ 'ndims numel disp isempty isequal isequalwithequalnans cat reshape diag blkdiag tril ' +
+ 'triu fliplr flipud flipdim rot90 find sub2ind ind2sub bsxfun ndgrid permute ipermute ' +
+ 'shiftdim circshift squeeze isscalar isvector ans eps realmax realmin pi i inf nan ' +
+ 'isnan isinf isfinite j why compan gallery hadamard hankel hilb invhilb magic pascal ' +
+ 'rosser toeplitz vander wilkinson'
+ },
+ illegal: '(//|"|#|/\\*|\\s+/\\w+)',
+ contains: [
+ {
+ className: 'function',
+ beginKeywords: 'function', end: '$',
+ contains: [
+ hljs.UNDERSCORE_TITLE_MODE,
+ {
+ className: 'params',
+ variants: [
+ {begin: '\\(', end: '\\)'},
+ {begin: '\\[', end: '\\]'}
+ ]
+ }
+ ]
+ },
+ {
+ begin: /[a-zA-Z_][a-zA-Z_0-9]*'['\.]*/,
+ returnBegin: true,
+ relevance: 0,
+ contains: [
+ {begin: /[a-zA-Z_][a-zA-Z_0-9]*/, relevance: 0},
+ TRANSPOSE.contains[0]
+ ]
+ },
+ {
+ begin: '\\[', end: '\\]',
+ contains: COMMON_CONTAINS,
+ relevance: 0,
+ starts: TRANSPOSE
+ },
+ {
+ begin: '\\{', end: /}/,
+ contains: COMMON_CONTAINS,
+ relevance: 0,
+ starts: TRANSPOSE
+ },
+ {
+ // transpose operators at the end of a function call
+ begin: /\)/,
+ relevance: 0,
+ starts: TRANSPOSE
+ },
+ hljs.COMMENT('^\\s*\\%\\{\\s*$', '^\\s*\\%\\}\\s*$'),
+ hljs.COMMENT('\\%', '$')
+ ].concat(COMMON_CONTAINS)
+ };
+});
+
+hljs.registerLanguage("maxima",
+/*
+Language: Maxima
+Author: Robert Dodier <robert.dodier@gmail.com>
+Category: scientific
+*/
+
+function(hljs) {
+ var KEYWORDS = 'if then else elseif for thru do while unless step in and or not';
+ var LITERALS = 'true false unknown inf minf ind und %e %i %pi %phi %gamma';
+ var BUILTIN_FUNCTIONS =
+ ' abasep abs absint absolute_real_time acos acosh acot acoth acsc acsch activate'
+ + ' addcol add_edge add_edges addmatrices addrow add_vertex add_vertices adjacency_matrix'
+ + ' adjoin adjoint af agd airy airy_ai airy_bi airy_dai airy_dbi algsys alg_type'
+ + ' alias allroots alphacharp alphanumericp amortization %and annuity_fv'
+ + ' annuity_pv antid antidiff AntiDifference append appendfile apply apply1 apply2'
+ + ' applyb1 apropos args arit_amortization arithmetic arithsum array arrayapply'
+ + ' arrayinfo arraymake arraysetapply ascii asec asech asin asinh askinteger'
+ + ' asksign assoc assoc_legendre_p assoc_legendre_q assume assume_external_byte_order'
+ + ' asympa at atan atan2 atanh atensimp atom atvalue augcoefmatrix augmented_lagrangian_method'
+ + ' av average_degree backtrace bars barsplot barsplot_description base64 base64_decode'
+ + ' bashindices batch batchload bc2 bdvac belln benefit_cost bern bernpoly bernstein_approx'
+ + ' bernstein_expand bernstein_poly bessel bessel_i bessel_j bessel_k bessel_simplify'
+ + ' bessel_y beta beta_incomplete beta_incomplete_generalized beta_incomplete_regularized'
+ + ' bezout bfallroots bffac bf_find_root bf_fmin_cobyla bfhzeta bfloat bfloatp'
+ + ' bfpsi bfpsi0 bfzeta biconnected_components bimetric binomial bipartition'
+ + ' block blockmatrixp bode_gain bode_phase bothcoef box boxplot boxplot_description'
+ + ' break bug_report build_info|10 buildq build_sample burn cabs canform canten'
+ + ' cardinality carg cartan cartesian_product catch cauchy_matrix cbffac cdf_bernoulli'
+ + ' cdf_beta cdf_binomial cdf_cauchy cdf_chi2 cdf_continuous_uniform cdf_discrete_uniform'
+ + ' cdf_exp cdf_f cdf_gamma cdf_general_finite_discrete cdf_geometric cdf_gumbel'
+ + ' cdf_hypergeometric cdf_laplace cdf_logistic cdf_lognormal cdf_negative_binomial'
+ + ' cdf_noncentral_chi2 cdf_noncentral_student_t cdf_normal cdf_pareto cdf_poisson'
+ + ' cdf_rank_sum cdf_rayleigh cdf_signed_rank cdf_student_t cdf_weibull cdisplay'
+ + ' ceiling central_moment cequal cequalignore cf cfdisrep cfexpand cgeodesic'
+ + ' cgreaterp cgreaterpignore changename changevar chaosgame charat charfun charfun2'
+ + ' charlist charp charpoly chdir chebyshev_t chebyshev_u checkdiv check_overlaps'
+ + ' chinese cholesky christof chromatic_index chromatic_number cint circulant_graph'
+ + ' clear_edge_weight clear_rules clear_vertex_label clebsch_gordan clebsch_graph'
+ + ' clessp clesspignore close closefile cmetric coeff coefmatrix cograd col collapse'
+ + ' collectterms columnop columnspace columnswap columnvector combination combine'
+ + ' comp2pui compare compfile compile compile_file complement_graph complete_bipartite_graph'
+ + ' complete_graph complex_number_p components compose_functions concan concat'
+ + ' conjugate conmetderiv connected_components connect_vertices cons constant'
+ + ' constantp constituent constvalue cont2part content continuous_freq contortion'
+ + ' contour_plot contract contract_edge contragrad contrib_ode convert coord'
+ + ' copy copy_file copy_graph copylist copymatrix cor cos cosh cot coth cov cov1'
+ + ' covdiff covect covers crc24sum create_graph create_list csc csch csetup cspline'
+ + ' ctaylor ct_coordsys ctransform ctranspose cube_graph cuboctahedron_graph'
+ + ' cunlisp cv cycle_digraph cycle_graph cylindrical days360 dblint deactivate'
+ + ' declare declare_constvalue declare_dimensions declare_fundamental_dimensions'
+ + ' declare_fundamental_units declare_qty declare_translated declare_unit_conversion'
+ + ' declare_units declare_weights decsym defcon define define_alt_display define_variable'
+ + ' defint defmatch defrule defstruct deftaylor degree_sequence del delete deleten'
+ + ' delta demo demoivre denom depends derivdegree derivlist describe desolve'
+ + ' determinant dfloat dgauss_a dgauss_b dgeev dgemm dgeqrf dgesv dgesvd diag'
+ + ' diagmatrix diag_matrix diagmatrixp diameter diff digitcharp dimacs_export'
+ + ' dimacs_import dimension dimensionless dimensions dimensions_as_list direct'
+ + ' directory discrete_freq disjoin disjointp disolate disp dispcon dispform'
+ + ' dispfun dispJordan display disprule dispterms distrib divide divisors divsum'
+ + ' dkummer_m dkummer_u dlange dodecahedron_graph dotproduct dotsimp dpart'
+ + ' draw draw2d draw3d drawdf draw_file draw_graph dscalar echelon edge_coloring'
+ + ' edge_connectivity edges eigens_by_jacobi eigenvalues eigenvectors eighth'
+ + ' einstein eivals eivects elapsed_real_time elapsed_run_time ele2comp ele2polynome'
+ + ' ele2pui elem elementp elevation_grid elim elim_allbut eliminate eliminate_using'
+ + ' ellipse elliptic_e elliptic_ec elliptic_eu elliptic_f elliptic_kc elliptic_pi'
+ + ' ematrix empty_graph emptyp endcons entermatrix entertensor entier equal equalp'
+ + ' equiv_classes erf erfc erf_generalized erfi errcatch error errormsg errors'
+ + ' euler ev eval_string evenp every evolution evolution2d evundiff example exp'
+ + ' expand expandwrt expandwrt_factored expint expintegral_chi expintegral_ci'
+ + ' expintegral_e expintegral_e1 expintegral_ei expintegral_e_simplify expintegral_li'
+ + ' expintegral_shi expintegral_si explicit explose exponentialize express expt'
+ + ' exsec extdiff extract_linear_equations extremal_subset ezgcd %f f90 facsum'
+ + ' factcomb factor factorfacsum factorial factorout factorsum facts fast_central_elements'
+ + ' fast_linsolve fasttimes featurep fernfale fft fib fibtophi fifth filename_merge'
+ + ' file_search file_type fillarray findde find_root find_root_abs find_root_error'
+ + ' find_root_rel first fix flatten flength float floatnump floor flower_snark'
+ + ' flush flush1deriv flushd flushnd flush_output fmin_cobyla forget fortran'
+ + ' fourcos fourexpand fourier fourier_elim fourint fourintcos fourintsin foursimp'
+ + ' foursin fourth fposition frame_bracket freeof freshline fresnel_c fresnel_s'
+ + ' from_adjacency_matrix frucht_graph full_listify fullmap fullmapl fullratsimp'
+ + ' fullratsubst fullsetify funcsolve fundamental_dimensions fundamental_units'
+ + ' fundef funmake funp fv g0 g1 gamma gamma_greek gamma_incomplete gamma_incomplete_generalized'
+ + ' gamma_incomplete_regularized gauss gauss_a gauss_b gaussprob gcd gcdex gcdivide'
+ + ' gcfac gcfactor gd generalized_lambert_w genfact gen_laguerre genmatrix gensym'
+ + ' geo_amortization geo_annuity_fv geo_annuity_pv geomap geometric geometric_mean'
+ + ' geosum get getcurrentdirectory get_edge_weight getenv get_lu_factors get_output_stream_string'
+ + ' get_pixel get_plot_option get_tex_environment get_tex_environment_default'
+ + ' get_vertex_label gfactor gfactorsum ggf girth global_variances gn gnuplot_close'
+ + ' gnuplot_replot gnuplot_reset gnuplot_restart gnuplot_start go Gosper GosperSum'
+ + ' gr2d gr3d gradef gramschmidt graph6_decode graph6_encode graph6_export graph6_import'
+ + ' graph_center graph_charpoly graph_eigenvalues graph_flow graph_order graph_periphery'
+ + ' graph_product graph_size graph_union great_rhombicosidodecahedron_graph great_rhombicuboctahedron_graph'
+ + ' grid_graph grind grobner_basis grotzch_graph hamilton_cycle hamilton_path'
+ + ' hankel hankel_1 hankel_2 harmonic harmonic_mean hav heawood_graph hermite'
+ + ' hessian hgfred hilbertmap hilbert_matrix hipow histogram histogram_description'
+ + ' hodge horner hypergeometric i0 i1 %ibes ic1 ic2 ic_convert ichr1 ichr2 icosahedron_graph'
+ + ' icosidodecahedron_graph icurvature ident identfor identity idiff idim idummy'
+ + ' ieqn %if ifactors iframes ifs igcdex igeodesic_coords ilt image imagpart'
+ + ' imetric implicit implicit_derivative implicit_plot indexed_tensor indices'
+ + ' induced_subgraph inferencep inference_result infix info_display init_atensor'
+ + ' init_ctensor in_neighbors innerproduct inpart inprod inrt integerp integer_partitions'
+ + ' integrate intersect intersection intervalp intopois intosum invariant1 invariant2'
+ + ' inverse_fft inverse_jacobi_cd inverse_jacobi_cn inverse_jacobi_cs inverse_jacobi_dc'
+ + ' inverse_jacobi_dn inverse_jacobi_ds inverse_jacobi_nc inverse_jacobi_nd inverse_jacobi_ns'
+ + ' inverse_jacobi_sc inverse_jacobi_sd inverse_jacobi_sn invert invert_by_adjoint'
+ + ' invert_by_lu inv_mod irr is is_biconnected is_bipartite is_connected is_digraph'
+ + ' is_edge_in_graph is_graph is_graph_or_digraph ishow is_isomorphic isolate'
+ + ' isomorphism is_planar isqrt isreal_p is_sconnected is_tree is_vertex_in_graph'
+ + ' items_inference %j j0 j1 jacobi jacobian jacobi_cd jacobi_cn jacobi_cs jacobi_dc'
+ + ' jacobi_dn jacobi_ds jacobi_nc jacobi_nd jacobi_ns jacobi_p jacobi_sc jacobi_sd'
+ + ' jacobi_sn JF jn join jordan julia julia_set julia_sin %k kdels kdelta kill'
+ + ' killcontext kostka kron_delta kronecker_product kummer_m kummer_u kurtosis'
+ + ' kurtosis_bernoulli kurtosis_beta kurtosis_binomial kurtosis_chi2 kurtosis_continuous_uniform'
+ + ' kurtosis_discrete_uniform kurtosis_exp kurtosis_f kurtosis_gamma kurtosis_general_finite_discrete'
+ + ' kurtosis_geometric kurtosis_gumbel kurtosis_hypergeometric kurtosis_laplace'
+ + ' kurtosis_logistic kurtosis_lognormal kurtosis_negative_binomial kurtosis_noncentral_chi2'
+ + ' kurtosis_noncentral_student_t kurtosis_normal kurtosis_pareto kurtosis_poisson'
+ + ' kurtosis_rayleigh kurtosis_student_t kurtosis_weibull label labels lagrange'
+ + ' laguerre lambda lambert_w laplace laplacian_matrix last lbfgs lc2kdt lcharp'
+ + ' lc_l lcm lc_u ldefint ldisp ldisplay legendre_p legendre_q leinstein length'
+ + ' let letrules letsimp levi_civita lfreeof lgtreillis lhs li liediff limit'
+ + ' Lindstedt linear linearinterpol linear_program linear_regression line_graph'
+ + ' linsolve listarray list_correlations listify list_matrix_entries list_nc_monomials'
+ + ' listoftens listofvars listp lmax lmin load loadfile local locate_matrix_entry'
+ + ' log logcontract log_gamma lopow lorentz_gauge lowercasep lpart lratsubst'
+ + ' lreduce lriemann lsquares_estimates lsquares_estimates_approximate lsquares_estimates_exact'
+ + ' lsquares_mse lsquares_residual_mse lsquares_residuals lsum ltreillis lu_backsub'
+ + ' lucas lu_factor %m macroexpand macroexpand1 make_array makebox makefact makegamma'
+ + ' make_graph make_level_picture makelist makeOrders make_poly_continent make_poly_country'
+ + ' make_polygon make_random_state make_rgb_picture makeset make_string_input_stream'
+ + ' make_string_output_stream make_transform mandelbrot mandelbrot_set map mapatom'
+ + ' maplist matchdeclare matchfix mat_cond mat_fullunblocker mat_function mathml_display'
+ + ' mat_norm matrix matrixmap matrixp matrix_size mattrace mat_trace mat_unblocker'
+ + ' max max_clique max_degree max_flow maximize_lp max_independent_set max_matching'
+ + ' maybe md5sum mean mean_bernoulli mean_beta mean_binomial mean_chi2 mean_continuous_uniform'
+ + ' mean_deviation mean_discrete_uniform mean_exp mean_f mean_gamma mean_general_finite_discrete'
+ + ' mean_geometric mean_gumbel mean_hypergeometric mean_laplace mean_logistic'
+ + ' mean_lognormal mean_negative_binomial mean_noncentral_chi2 mean_noncentral_student_t'
+ + ' mean_normal mean_pareto mean_poisson mean_rayleigh mean_student_t mean_weibull'
+ + ' median median_deviation member mesh metricexpandall mgf1_sha1 min min_degree'
+ + ' min_edge_cut minfactorial minimalPoly minimize_lp minimum_spanning_tree minor'
+ + ' minpack_lsquares minpack_solve min_vertex_cover min_vertex_cut mkdir mnewton'
+ + ' mod mode_declare mode_identity ModeMatrix moebius mon2schur mono monomial_dimensions'
+ + ' multibernstein_poly multi_display_for_texinfo multi_elem multinomial multinomial_coeff'
+ + ' multi_orbit multiplot_mode multi_pui multsym multthru mycielski_graph nary'
+ + ' natural_unit nc_degree ncexpt ncharpoly negative_picture neighbors new newcontext'
+ + ' newdet new_graph newline newton new_variable next_prime nicedummies niceindices'
+ + ' ninth nofix nonarray noncentral_moment nonmetricity nonnegintegerp nonscalarp'
+ + ' nonzeroandfreeof notequal nounify nptetrad npv nroots nterms ntermst'
+ + ' nthroot nullity nullspace num numbered_boundaries numberp number_to_octets'
+ + ' num_distinct_partitions numerval numfactor num_partitions nusum nzeta nzetai'
+ + ' nzetar octets_to_number octets_to_oid odd_girth oddp ode2 ode_check odelin'
+ + ' oid_to_octets op opena opena_binary openr openr_binary openw openw_binary'
+ + ' operatorp opsubst optimize %or orbit orbits ordergreat ordergreatp orderless'
+ + ' orderlessp orthogonal_complement orthopoly_recur orthopoly_weight outermap'
+ + ' out_neighbors outofpois pade parabolic_cylinder_d parametric parametric_surface'
+ + ' parg parGosper parse_string parse_timedate part part2cont partfrac partition'
+ + ' partition_set partpol path_digraph path_graph pathname_directory pathname_name'
+ + ' pathname_type pdf_bernoulli pdf_beta pdf_binomial pdf_cauchy pdf_chi2 pdf_continuous_uniform'
+ + ' pdf_discrete_uniform pdf_exp pdf_f pdf_gamma pdf_general_finite_discrete'
+ + ' pdf_geometric pdf_gumbel pdf_hypergeometric pdf_laplace pdf_logistic pdf_lognormal'
+ + ' pdf_negative_binomial pdf_noncentral_chi2 pdf_noncentral_student_t pdf_normal'
+ + ' pdf_pareto pdf_poisson pdf_rank_sum pdf_rayleigh pdf_signed_rank pdf_student_t'
+ + ' pdf_weibull pearson_skewness permanent permut permutation permutations petersen_graph'
+ + ' petrov pickapart picture_equalp picturep piechart piechart_description planar_embedding'
+ + ' playback plog plot2d plot3d plotdf ploteq plsquares pochhammer points poisdiff'
+ + ' poisexpt poisint poismap poisplus poissimp poissubst poistimes poistrim polar'
+ + ' polarform polartorect polar_to_xy poly_add poly_buchberger poly_buchberger_criterion'
+ + ' poly_colon_ideal poly_content polydecomp poly_depends_p poly_elimination_ideal'
+ + ' poly_exact_divide poly_expand poly_expt poly_gcd polygon poly_grobner poly_grobner_equal'
+ + ' poly_grobner_member poly_grobner_subsetp poly_ideal_intersection poly_ideal_polysaturation'
+ + ' poly_ideal_polysaturation1 poly_ideal_saturation poly_ideal_saturation1 poly_lcm'
+ + ' poly_minimization polymod poly_multiply polynome2ele polynomialp poly_normal_form'
+ + ' poly_normalize poly_normalize_list poly_polysaturation_extension poly_primitive_part'
+ + ' poly_pseudo_divide poly_reduced_grobner poly_reduction poly_saturation_extension'
+ + ' poly_s_polynomial poly_subtract polytocompanion pop postfix potential power_mod'
+ + ' powerseries powerset prefix prev_prime primep primes principal_components'
+ + ' print printf printfile print_graph printpois printprops prodrac product properties'
+ + ' propvars psi psubst ptriangularize pui pui2comp pui2ele pui2polynome pui_direct'
+ + ' puireduc push put pv qput qrange qty quad_control quad_qag quad_qagi quad_qagp'
+ + ' quad_qags quad_qawc quad_qawf quad_qawo quad_qaws quadrilateral quantile'
+ + ' quantile_bernoulli quantile_beta quantile_binomial quantile_cauchy quantile_chi2'
+ + ' quantile_continuous_uniform quantile_discrete_uniform quantile_exp quantile_f'
+ + ' quantile_gamma quantile_general_finite_discrete quantile_geometric quantile_gumbel'
+ + ' quantile_hypergeometric quantile_laplace quantile_logistic quantile_lognormal'
+ + ' quantile_negative_binomial quantile_noncentral_chi2 quantile_noncentral_student_t'
+ + ' quantile_normal quantile_pareto quantile_poisson quantile_rayleigh quantile_student_t'
+ + ' quantile_weibull quartile_skewness quit qunit quotient racah_v racah_w radcan'
+ + ' radius random random_bernoulli random_beta random_binomial random_bipartite_graph'
+ + ' random_cauchy random_chi2 random_continuous_uniform random_digraph random_discrete_uniform'
+ + ' random_exp random_f random_gamma random_general_finite_discrete random_geometric'
+ + ' random_graph random_graph1 random_gumbel random_hypergeometric random_laplace'
+ + ' random_logistic random_lognormal random_negative_binomial random_network'
+ + ' random_noncentral_chi2 random_noncentral_student_t random_normal random_pareto'
+ + ' random_permutation random_poisson random_rayleigh random_regular_graph random_student_t'
+ + ' random_tournament random_tree random_weibull range rank rat ratcoef ratdenom'
+ + ' ratdiff ratdisrep ratexpand ratinterpol rational rationalize ratnumer ratnump'
+ + ' ratp ratsimp ratsubst ratvars ratweight read read_array read_binary_array'
+ + ' read_binary_list read_binary_matrix readbyte readchar read_hashed_array readline'
+ + ' read_list read_matrix read_nested_list readonly read_xpm real_imagpart_to_conjugate'
+ + ' realpart realroots rearray rectangle rectform rectform_log_if_constant recttopolar'
+ + ' rediff reduce_consts reduce_order region region_boundaries region_boundaries_plus'
+ + ' rem remainder remarray rembox remcomps remcon remcoord remfun remfunction'
+ + ' remlet remove remove_constvalue remove_dimensions remove_edge remove_fundamental_dimensions'
+ + ' remove_fundamental_units remove_plot_option remove_vertex rempart remrule'
+ + ' remsym remvalue rename rename_file reset reset_displays residue resolvante'
+ + ' resolvante_alternee1 resolvante_bipartite resolvante_diedrale resolvante_klein'
+ + ' resolvante_klein3 resolvante_produit_sym resolvante_unitaire resolvante_vierer'
+ + ' rest resultant return reveal reverse revert revert2 rgb2level rhs ricci riemann'
+ + ' rinvariant risch rk rmdir rncombine romberg room rootscontract round row'
+ + ' rowop rowswap rreduce run_testsuite %s save saving scalarp scaled_bessel_i'
+ + ' scaled_bessel_i0 scaled_bessel_i1 scalefactors scanmap scatterplot scatterplot_description'
+ + ' scene schur2comp sconcat scopy scsimp scurvature sdowncase sec sech second'
+ + ' sequal sequalignore set_alt_display setdifference set_draw_defaults set_edge_weight'
+ + ' setelmx setequalp setify setp set_partitions set_plot_option set_prompt set_random_state'
+ + ' set_tex_environment set_tex_environment_default setunits setup_autoload set_up_dot_simplifications'
+ + ' set_vertex_label seventh sexplode sf sha1sum sha256sum shortest_path shortest_weighted_path'
+ + ' show showcomps showratvars sierpinskiale sierpinskimap sign signum similaritytransform'
+ + ' simp_inequality simplify_sum simplode simpmetderiv simtran sin sinh sinsert'
+ + ' sinvertcase sixth skewness skewness_bernoulli skewness_beta skewness_binomial'
+ + ' skewness_chi2 skewness_continuous_uniform skewness_discrete_uniform skewness_exp'
+ + ' skewness_f skewness_gamma skewness_general_finite_discrete skewness_geometric'
+ + ' skewness_gumbel skewness_hypergeometric skewness_laplace skewness_logistic'
+ + ' skewness_lognormal skewness_negative_binomial skewness_noncentral_chi2 skewness_noncentral_student_t'
+ + ' skewness_normal skewness_pareto skewness_poisson skewness_rayleigh skewness_student_t'
+ + ' skewness_weibull slength smake small_rhombicosidodecahedron_graph small_rhombicuboctahedron_graph'
+ + ' smax smin smismatch snowmap snub_cube_graph snub_dodecahedron_graph solve'
+ + ' solve_rec solve_rec_rat some somrac sort sparse6_decode sparse6_encode sparse6_export'
+ + ' sparse6_import specint spherical spherical_bessel_j spherical_bessel_y spherical_hankel1'
+ + ' spherical_hankel2 spherical_harmonic spherical_to_xyz splice split sposition'
+ + ' sprint sqfr sqrt sqrtdenest sremove sremovefirst sreverse ssearch ssort sstatus'
+ + ' ssubst ssubstfirst staircase standardize standardize_inverse_trig starplot'
+ + ' starplot_description status std std1 std_bernoulli std_beta std_binomial'
+ + ' std_chi2 std_continuous_uniform std_discrete_uniform std_exp std_f std_gamma'
+ + ' std_general_finite_discrete std_geometric std_gumbel std_hypergeometric std_laplace'
+ + ' std_logistic std_lognormal std_negative_binomial std_noncentral_chi2 std_noncentral_student_t'
+ + ' std_normal std_pareto std_poisson std_rayleigh std_student_t std_weibull'
+ + ' stemplot stirling stirling1 stirling2 strim striml strimr string stringout'
+ + ' stringp strong_components struve_h struve_l sublis sublist sublist_indices'
+ + ' submatrix subsample subset subsetp subst substinpart subst_parallel substpart'
+ + ' substring subvar subvarp sum sumcontract summand_to_rec supcase supcontext'
+ + ' symbolp symmdifference symmetricp system take_channel take_inference tan'
+ + ' tanh taylor taylorinfo taylorp taylor_simplifier taytorat tcl_output tcontract'
+ + ' tellrat tellsimp tellsimpafter tentex tenth test_mean test_means_difference'
+ + ' test_normality test_proportion test_proportions_difference test_rank_sum'
+ + ' test_sign test_signed_rank test_variance test_variance_ratio tex tex1 tex_display'
+ + ' texput %th third throw time timedate timer timer_info tldefint tlimit todd_coxeter'
+ + ' toeplitz tokens to_lisp topological_sort to_poly to_poly_solve totaldisrep'
+ + ' totalfourier totient tpartpol trace tracematrix trace_options transform_sample'
+ + ' translate translate_file transpose treefale tree_reduce treillis treinat'
+ + ' triangle triangularize trigexpand trigrat trigreduce trigsimp trunc truncate'
+ + ' truncated_cube_graph truncated_dodecahedron_graph truncated_icosahedron_graph'
+ + ' truncated_tetrahedron_graph tr_warnings_get tube tutte_graph ueivects uforget'
+ + ' ultraspherical underlying_graph undiff union unique uniteigenvectors unitp'
+ + ' units unit_step unitvector unorder unsum untellrat untimer'
+ + ' untrace uppercasep uricci uriemann uvect vandermonde_matrix var var1 var_bernoulli'
+ + ' var_beta var_binomial var_chi2 var_continuous_uniform var_discrete_uniform'
+ + ' var_exp var_f var_gamma var_general_finite_discrete var_geometric var_gumbel'
+ + ' var_hypergeometric var_laplace var_logistic var_lognormal var_negative_binomial'
+ + ' var_noncentral_chi2 var_noncentral_student_t var_normal var_pareto var_poisson'
+ + ' var_rayleigh var_student_t var_weibull vector vectorpotential vectorsimp'
+ + ' verbify vers vertex_coloring vertex_connectivity vertex_degree vertex_distance'
+ + ' vertex_eccentricity vertex_in_degree vertex_out_degree vertices vertices_to_cycle'
+ + ' vertices_to_path %w weyl wheel_graph wiener_index wigner_3j wigner_6j'
+ + ' wigner_9j with_stdout write_binary_data writebyte write_data writefile wronskian'
+ + ' xreduce xthru %y Zeilberger zeroequiv zerofor zeromatrix zeromatrixp zeta'
+ + ' zgeev zheev zlange zn_add_table zn_carmichael_lambda zn_characteristic_factors'
+ + ' zn_determinant zn_factor_generators zn_invert_by_lu zn_log zn_mult_table'
+ + ' absboxchar activecontexts adapt_depth additive adim aform algebraic'
+ + ' algepsilon algexact aliases allbut all_dotsimp_denoms allocation allsym alphabetic'
+ + ' animation antisymmetric arrays askexp assume_pos assume_pos_pred assumescalar'
+ + ' asymbol atomgrad atrig1 axes axis_3d axis_bottom axis_left axis_right axis_top'
+ + ' azimuth background background_color backsubst berlefact bernstein_explicit'
+ + ' besselexpand beta_args_sum_to_integer beta_expand bftorat bftrunc bindtest'
+ + ' border boundaries_array box boxchar breakup %c capping cauchysum cbrange'
+ + ' cbtics center cflength cframe_flag cnonmet_flag color color_bar color_bar_tics'
+ + ' colorbox columns commutative complex cone context contexts contour contour_levels'
+ + ' cosnpiflag ctaypov ctaypt ctayswitch ctayvar ct_coords ctorsion_flag ctrgsimp'
+ + ' cube current_let_rule_package cylinder data_file_name debugmode decreasing'
+ + ' default_let_rule_package delay dependencies derivabbrev derivsubst detout'
+ + ' diagmetric diff dim dimensions dispflag display2d|10 display_format_internal'
+ + ' distribute_over doallmxops domain domxexpt domxmxops domxnctimes dontfactor'
+ + ' doscmxops doscmxplus dot0nscsimp dot0simp dot1simp dotassoc dotconstrules'
+ + ' dotdistrib dotexptsimp dotident dotscrules draw_graph_program draw_realpart'
+ + ' edge_color edge_coloring edge_partition edge_type edge_width %edispflag'
+ + ' elevation %emode endphi endtheta engineering_format_floats enhanced3d %enumer'
+ + ' epsilon_lp erfflag erf_representation errormsg error_size error_syms error_type'
+ + ' %e_to_numlog eval even evenfun evflag evfun ev_point expandwrt_denom expintexpand'
+ + ' expintrep expon expop exptdispflag exptisolate exptsubst facexpand facsum_combine'
+ + ' factlim factorflag factorial_expand factors_only fb feature features'
+ + ' file_name file_output_append file_search_demo file_search_lisp file_search_maxima|10'
+ + ' file_search_tests file_search_usage file_type_lisp file_type_maxima|10 fill_color'
+ + ' fill_density filled_func fixed_vertices flipflag float2bf font font_size'
+ + ' fortindent fortspaces fpprec fpprintprec functions gamma_expand gammalim'
+ + ' gdet genindex gensumnum GGFCFMAX GGFINFINITY globalsolve gnuplot_command'
+ + ' gnuplot_curve_styles gnuplot_curve_titles gnuplot_default_term_command gnuplot_dumb_term_command'
+ + ' gnuplot_file_args gnuplot_file_name gnuplot_out_file gnuplot_pdf_term_command'
+ + ' gnuplot_pm3d gnuplot_png_term_command gnuplot_postamble gnuplot_preamble'
+ + ' gnuplot_ps_term_command gnuplot_svg_term_command gnuplot_term gnuplot_view_args'
+ + ' Gosper_in_Zeilberger gradefs grid grid2d grind halfangles head_angle head_both'
+ + ' head_length head_type height hypergeometric_representation %iargs ibase'
+ + ' icc1 icc2 icounter idummyx ieqnprint ifb ifc1 ifc2 ifg ifgi ifr iframe_bracket_form'
+ + ' ifri igeowedge_flag ikt1 ikt2 imaginary inchar increasing infeval'
+ + ' infinity inflag infolists inm inmc1 inmc2 intanalysis integer integervalued'
+ + ' integrate_use_rootsof integration_constant integration_constant_counter interpolate_color'
+ + ' intfaclim ip_grid ip_grid_in irrational isolate_wrt_times iterations itr'
+ + ' julia_parameter %k1 %k2 keepfloat key key_pos kinvariant kt label label_alignment'
+ + ' label_orientation labels lassociative lbfgs_ncorrections lbfgs_nfeval_max'
+ + ' leftjust legend letrat let_rule_packages lfg lg lhospitallim limsubst linear'
+ + ' linear_solver linechar linel|10 linenum line_type linewidth line_width linsolve_params'
+ + ' linsolvewarn lispdisp listarith listconstvars listdummyvars lmxchar load_pathname'
+ + ' loadprint logabs logarc logcb logconcoeffp logexpand lognegint logsimp logx'
+ + ' logx_secondary logy logy_secondary logz lriem m1pbranch macroexpansion macros'
+ + ' mainvar manual_demo maperror mapprint matrix_element_add matrix_element_mult'
+ + ' matrix_element_transpose maxapplydepth maxapplyheight maxima_tempdir|10 maxima_userdir|10'
+ + ' maxnegex MAX_ORD maxposex maxpsifracdenom maxpsifracnum maxpsinegint maxpsiposint'
+ + ' maxtayorder mesh_lines_color method mod_big_prime mode_check_errorp'
+ + ' mode_checkp mode_check_warnp mod_test mod_threshold modular_linear_solver'
+ + ' modulus multiplicative multiplicities myoptions nary negdistrib negsumdispflag'
+ + ' newline newtonepsilon newtonmaxiter nextlayerfactor niceindicespref nm nmc'
+ + ' noeval nolabels nonegative_lp noninteger nonscalar noun noundisp nouns np'
+ + ' npi nticks ntrig numer numer_pbranch obase odd oddfun opacity opproperties'
+ + ' opsubst optimprefix optionset orientation origin orthopoly_returns_intervals'
+ + ' outative outchar packagefile palette partswitch pdf_file pfeformat phiresolution'
+ + ' %piargs piece pivot_count_sx pivot_max_sx plot_format plot_options plot_realpart'
+ + ' png_file pochhammer_max_index points pointsize point_size points_joined point_type'
+ + ' poislim poisson poly_coefficient_ring poly_elimination_order polyfactor poly_grobner_algorithm'
+ + ' poly_grobner_debug poly_monomial_order poly_primary_elimination_order poly_return_term_list'
+ + ' poly_secondary_elimination_order poly_top_reduction_only posfun position'
+ + ' powerdisp pred prederror primep_number_of_tests product_use_gamma program'
+ + ' programmode promote_float_to_bigfloat prompt proportional_axes props psexpand'
+ + ' ps_file radexpand radius radsubstflag rassociative ratalgdenom ratchristof'
+ + ' ratdenomdivide rateinstein ratepsilon ratfac rational ratmx ratprint ratriemann'
+ + ' ratsimpexpons ratvarswitch ratweights ratweyl ratwtlvl real realonly redraw'
+ + ' refcheck resolution restart resultant ric riem rmxchar %rnum_list rombergabs'
+ + ' rombergit rombergmin rombergtol rootsconmode rootsepsilon run_viewer same_xy'
+ + ' same_xyz savedef savefactors scalar scalarmatrixp scale scale_lp setcheck'
+ + ' setcheckbreak setval show_edge_color show_edges show_edge_type show_edge_width'
+ + ' show_id show_label showtime show_vertex_color show_vertex_size show_vertex_type'
+ + ' show_vertices show_weight simp simplified_output simplify_products simpproduct'
+ + ' simpsum sinnpiflag solvedecomposes solveexplicit solvefactors solvenullwarn'
+ + ' solveradcan solvetrigwarn space sparse sphere spring_embedding_depth sqrtdispflag'
+ + ' stardisp startphi starttheta stats_numer stringdisp structures style sublis_apply_lambda'
+ + ' subnumsimp sumexpand sumsplitfact surface surface_hide svg_file symmetric'
+ + ' tab taylordepth taylor_logexpand taylor_order_coefficients taylor_truncate_polynomials'
+ + ' tensorkill terminal testsuite_files thetaresolution timer_devalue title tlimswitch'
+ + ' tr track transcompile transform transform_xy translate_fast_arrays transparent'
+ + ' transrun tr_array_as_ref tr_bound_function_applyp tr_file_tty_messagesp tr_float_can_branch_complex'
+ + ' tr_function_call_default trigexpandplus trigexpandtimes triginverses trigsign'
+ + ' trivial_solutions tr_numer tr_optimize_max_loop tr_semicompile tr_state_vars'
+ + ' tr_warn_bad_function_calls tr_warn_fexpr tr_warn_meval tr_warn_mode'
+ + ' tr_warn_undeclared tr_warn_undefined_variable tstep ttyoff tube_extremes'
+ + ' ufg ug %unitexpand unit_vectors uric uriem use_fast_arrays user_preamble'
+ + ' usersetunits values vect_cross verbose vertex_color vertex_coloring vertex_partition'
+ + ' vertex_size vertex_type view warnings weyl width windowname windowtitle wired_surface'
+ + ' wireframe xaxis xaxis_color xaxis_secondary xaxis_type xaxis_width xlabel'
+ + ' xlabel_secondary xlength xrange xrange_secondary xtics xtics_axis xtics_rotate'
+ + ' xtics_rotate_secondary xtics_secondary xtics_secondary_axis xu_grid x_voxel'
+ + ' xy_file xyplane xy_scale yaxis yaxis_color yaxis_secondary yaxis_type yaxis_width'
+ + ' ylabel ylabel_secondary ylength yrange yrange_secondary ytics ytics_axis'
+ + ' ytics_rotate ytics_rotate_secondary ytics_secondary ytics_secondary_axis'
+ + ' yv_grid y_voxel yx_ratio zaxis zaxis_color zaxis_type zaxis_width zeroa zerob'
+ + ' zerobern zeta%pi zlabel zlabel_rotate zlength zmin zn_primroot_limit zn_primroot_pretest';
+ var SYMBOLS = '_ __ %|0 %%|0';
+
+ return {
+ lexemes: '[A-Za-z_%][0-9A-Za-z_%]*',
+ keywords: {
+ keyword: KEYWORDS,
+ literal: LITERALS,
+ built_in: BUILTIN_FUNCTIONS,
+ symbol: SYMBOLS,
+ },
+ contains: [
+ {
+ className: 'comment',
+ begin: '/\\*',
+ end: '\\*/',
+ contains: ['self']
+ },
+ hljs.QUOTE_STRING_MODE,
+ {
+ className: 'number',
+ relevance: 0,
+ variants: [
+ {
+ // float number w/ exponent
+ // hmm, I wonder if we ought to include other exponent markers?
+ begin: '\\b(\\d+|\\d+\\.|\\.\\d+|\\d+\\.\\d+)[Ee][-+]?\\d+\\b',
+ },
+ {
+ // bigfloat number
+ begin: '\\b(\\d+|\\d+\\.|\\.\\d+|\\d+\\.\\d+)[Bb][-+]?\\d+\\b',
+ relevance: 10
+ },
+ {
+ // float number w/out exponent
+ // Doesn't seem to recognize floats which start with '.'
+ begin: '\\b(\\.\\d+|\\d+\\.\\d+)\\b',
+ },
+ {
+ // integer in base up to 36
+ // Doesn't seem to recognize integers which end with '.'
+ begin: '\\b(\\d+|0[0-9A-Za-z]+)\\.?\\b',
+ }
+ ]
+ }
+ ],
+ illegal: /@/
+ }
+});
+
+hljs.registerLanguage("mel",
+/*
+Language: MEL
+Description: Maya Embedded Language
+Author: Shuen-Huei Guan <drake.guan@gmail.com>
+Category: graphics
+*/
+
+function(hljs) {
+ return {
+ keywords:
+ 'int float string vector matrix if else switch case default while do for in break ' +
+ 'continue global proc return about abs addAttr addAttributeEditorNodeHelp addDynamic ' +
+ 'addNewShelfTab addPP addPanelCategory addPrefixToName advanceToNextDrivenKey ' +
+ 'affectedNet affects aimConstraint air alias aliasAttr align alignCtx alignCurve ' +
+ 'alignSurface allViewFit ambientLight angle angleBetween animCone animCurveEditor ' +
+ 'animDisplay animView annotate appendStringArray applicationName applyAttrPreset ' +
+ 'applyTake arcLenDimContext arcLengthDimension arclen arrayMapper art3dPaintCtx ' +
+ 'artAttrCtx artAttrPaintVertexCtx artAttrSkinPaintCtx artAttrTool artBuildPaintMenu ' +
+ 'artFluidAttrCtx artPuttyCtx artSelectCtx artSetPaintCtx artUserPaintCtx assignCommand ' +
+ 'assignInputDevice assignViewportFactories attachCurve attachDeviceAttr attachSurface ' +
+ 'attrColorSliderGrp attrCompatibility attrControlGrp attrEnumOptionMenu ' +
+ 'attrEnumOptionMenuGrp attrFieldGrp attrFieldSliderGrp attrNavigationControlGrp ' +
+ 'attrPresetEditWin attributeExists attributeInfo attributeMenu attributeQuery ' +
+ 'autoKeyframe autoPlace bakeClip bakeFluidShading bakePartialHistory bakeResults ' +
+ 'bakeSimulation basename basenameEx batchRender bessel bevel bevelPlus binMembership ' +
+ 'bindSkin blend2 blendShape blendShapeEditor blendShapePanel blendTwoAttr blindDataType ' +
+ 'boneLattice boundary boxDollyCtx boxZoomCtx bufferCurve buildBookmarkMenu ' +
+ 'buildKeyframeMenu button buttonManip CBG cacheFile cacheFileCombine cacheFileMerge ' +
+ 'cacheFileTrack camera cameraView canCreateManip canvas capitalizeString catch ' +
+ 'catchQuiet ceil changeSubdivComponentDisplayLevel changeSubdivRegion channelBox ' +
+ 'character characterMap characterOutlineEditor characterize chdir checkBox checkBoxGrp ' +
+ 'checkDefaultRenderGlobals choice circle circularFillet clamp clear clearCache clip ' +
+ 'clipEditor clipEditorCurrentTimeCtx clipSchedule clipSchedulerOutliner clipTrimBefore ' +
+ 'closeCurve closeSurface cluster cmdFileOutput cmdScrollFieldExecuter ' +
+ 'cmdScrollFieldReporter cmdShell coarsenSubdivSelectionList collision color ' +
+ 'colorAtPoint colorEditor colorIndex colorIndexSliderGrp colorSliderButtonGrp ' +
+ 'colorSliderGrp columnLayout commandEcho commandLine commandPort compactHairSystem ' +
+ 'componentEditor compositingInterop computePolysetVolume condition cone confirmDialog ' +
+ 'connectAttr connectControl connectDynamic connectJoint connectionInfo constrain ' +
+ 'constrainValue constructionHistory container containsMultibyte contextInfo control ' +
+ 'convertFromOldLayers convertIffToPsd convertLightmap convertSolidTx convertTessellation ' +
+ 'convertUnit copyArray copyFlexor copyKey copySkinWeights cos cpButton cpCache ' +
+ 'cpClothSet cpCollision cpConstraint cpConvClothToMesh cpForces cpGetSolverAttr cpPanel ' +
+ 'cpProperty cpRigidCollisionFilter cpSeam cpSetEdit cpSetSolverAttr cpSolver ' +
+ 'cpSolverTypes cpTool cpUpdateClothUVs createDisplayLayer createDrawCtx createEditor ' +
+ 'createLayeredPsdFile createMotionField createNewShelf createNode createRenderLayer ' +
+ 'createSubdivRegion cross crossProduct ctxAbort ctxCompletion ctxEditMode ctxTraverse ' +
+ 'currentCtx currentTime currentTimeCtx currentUnit curve curveAddPtCtx ' +
+ 'curveCVCtx curveEPCtx curveEditorCtx curveIntersect curveMoveEPCtx curveOnSurface ' +
+ 'curveSketchCtx cutKey cycleCheck cylinder dagPose date defaultLightListCheckBox ' +
+ 'defaultNavigation defineDataServer defineVirtualDevice deformer deg_to_rad delete ' +
+ 'deleteAttr deleteShadingGroupsAndMaterials deleteShelfTab deleteUI deleteUnusedBrushes ' +
+ 'delrandstr detachCurve detachDeviceAttr detachSurface deviceEditor devicePanel dgInfo ' +
+ 'dgdirty dgeval dgtimer dimWhen directKeyCtx directionalLight dirmap dirname disable ' +
+ 'disconnectAttr disconnectJoint diskCache displacementToPoly displayAffected ' +
+ 'displayColor displayCull displayLevelOfDetail displayPref displayRGBColor ' +
+ 'displaySmoothness displayStats displayString displaySurface distanceDimContext ' +
+ 'distanceDimension doBlur dolly dollyCtx dopeSheetEditor dot dotProduct ' +
+ 'doubleProfileBirailSurface drag dragAttrContext draggerContext dropoffLocator ' +
+ 'duplicate duplicateCurve duplicateSurface dynCache dynControl dynExport dynExpression ' +
+ 'dynGlobals dynPaintEditor dynParticleCtx dynPref dynRelEdPanel dynRelEditor ' +
+ 'dynamicLoad editAttrLimits editDisplayLayerGlobals editDisplayLayerMembers ' +
+ 'editRenderLayerAdjustment editRenderLayerGlobals editRenderLayerMembers editor ' +
+ 'editorTemplate effector emit emitter enableDevice encodeString endString endsWith env ' +
+ 'equivalent equivalentTol erf error eval evalDeferred evalEcho event ' +
+ 'exactWorldBoundingBox exclusiveLightCheckBox exec executeForEachObject exists exp ' +
+ 'expression expressionEditorListen extendCurve extendSurface extrude fcheck fclose feof ' +
+ 'fflush fgetline fgetword file fileBrowserDialog fileDialog fileExtension fileInfo ' +
+ 'filetest filletCurve filter filterCurve filterExpand filterStudioImport ' +
+ 'findAllIntersections findAnimCurves findKeyframe findMenuItem findRelatedSkinCluster ' +
+ 'finder firstParentOf fitBspline flexor floatEq floatField floatFieldGrp floatScrollBar ' +
+ 'floatSlider floatSlider2 floatSliderButtonGrp floatSliderGrp floor flow fluidCacheInfo ' +
+ 'fluidEmitter fluidVoxelInfo flushUndo fmod fontDialog fopen formLayout format fprint ' +
+ 'frameLayout fread freeFormFillet frewind fromNativePath fwrite gamma gauss ' +
+ 'geometryConstraint getApplicationVersionAsFloat getAttr getClassification ' +
+ 'getDefaultBrush getFileList getFluidAttr getInputDeviceRange getMayaPanelTypes ' +
+ 'getModifiers getPanel getParticleAttr getPluginResource getenv getpid glRender ' +
+ 'glRenderEditor globalStitch gmatch goal gotoBindPose grabColor gradientControl ' +
+ 'gradientControlNoAttr graphDollyCtx graphSelectContext graphTrackCtx gravity grid ' +
+ 'gridLayout group groupObjectsByName HfAddAttractorToAS HfAssignAS HfBuildEqualMap ' +
+ 'HfBuildFurFiles HfBuildFurImages HfCancelAFR HfConnectASToHF HfCreateAttractor ' +
+ 'HfDeleteAS HfEditAS HfPerformCreateAS HfRemoveAttractorFromAS HfSelectAttached ' +
+ 'HfSelectAttractors HfUnAssignAS hardenPointCurve hardware hardwareRenderPanel ' +
+ 'headsUpDisplay headsUpMessage help helpLine hermite hide hilite hitTest hotBox hotkey ' +
+ 'hotkeyCheck hsv_to_rgb hudButton hudSlider hudSliderButton hwReflectionMap hwRender ' +
+ 'hwRenderLoad hyperGraph hyperPanel hyperShade hypot iconTextButton iconTextCheckBox ' +
+ 'iconTextRadioButton iconTextRadioCollection iconTextScrollList iconTextStaticLabel ' +
+ 'ikHandle ikHandleCtx ikHandleDisplayScale ikSolver ikSplineHandleCtx ikSystem ' +
+ 'ikSystemInfo ikfkDisplayMethod illustratorCurves image imfPlugins inheritTransform ' +
+ 'insertJoint insertJointCtx insertKeyCtx insertKnotCurve insertKnotSurface instance ' +
+ 'instanceable instancer intField intFieldGrp intScrollBar intSlider intSliderGrp ' +
+ 'interToUI internalVar intersect iprEngine isAnimCurve isConnected isDirty isParentOf ' +
+ 'isSameObject isTrue isValidObjectName isValidString isValidUiName isolateSelect ' +
+ 'itemFilter itemFilterAttr itemFilterRender itemFilterType joint jointCluster jointCtx ' +
+ 'jointDisplayScale jointLattice keyTangent keyframe keyframeOutliner ' +
+ 'keyframeRegionCurrentTimeCtx keyframeRegionDirectKeyCtx keyframeRegionDollyCtx ' +
+ 'keyframeRegionInsertKeyCtx keyframeRegionMoveKeyCtx keyframeRegionScaleKeyCtx ' +
+ 'keyframeRegionSelectKeyCtx keyframeRegionSetKeyCtx keyframeRegionTrackCtx ' +
+ 'keyframeStats lassoContext lattice latticeDeformKeyCtx launch launchImageEditor ' +
+ 'layerButton layeredShaderPort layeredTexturePort layout layoutDialog lightList ' +
+ 'lightListEditor lightListPanel lightlink lineIntersection linearPrecision linstep ' +
+ 'listAnimatable listAttr listCameras listConnections listDeviceAttachments listHistory ' +
+ 'listInputDeviceAxes listInputDeviceButtons listInputDevices listMenuAnnotation ' +
+ 'listNodeTypes listPanelCategories listRelatives listSets listTransforms ' +
+ 'listUnselected listerEditor loadFluid loadNewShelf loadPlugin ' +
+ 'loadPluginLanguageResources loadPrefObjects localizedPanelLabel lockNode loft log ' +
+ 'longNameOf lookThru ls lsThroughFilter lsType lsUI Mayatomr mag makeIdentity makeLive ' +
+ 'makePaintable makeRoll makeSingleSurface makeTubeOn makebot manipMoveContext ' +
+ 'manipMoveLimitsCtx manipOptions manipRotateContext manipRotateLimitsCtx ' +
+ 'manipScaleContext manipScaleLimitsCtx marker match max memory menu menuBarLayout ' +
+ 'menuEditor menuItem menuItemToShelf menuSet menuSetPref messageLine min minimizeApp ' +
+ 'mirrorJoint modelCurrentTimeCtx modelEditor modelPanel mouse movIn movOut move ' +
+ 'moveIKtoFK moveKeyCtx moveVertexAlongDirection multiProfileBirailSurface mute ' +
+ 'nParticle nameCommand nameField namespace namespaceInfo newPanelItems newton nodeCast ' +
+ 'nodeIconButton nodeOutliner nodePreset nodeType noise nonLinear normalConstraint ' +
+ 'normalize nurbsBoolean nurbsCopyUVSet nurbsCube nurbsEditUV nurbsPlane nurbsSelect ' +
+ 'nurbsSquare nurbsToPoly nurbsToPolygonsPref nurbsToSubdiv nurbsToSubdivPref ' +
+ 'nurbsUVSet nurbsViewDirectionVector objExists objectCenter objectLayer objectType ' +
+ 'objectTypeUI obsoleteProc oceanNurbsPreviewPlane offsetCurve offsetCurveOnSurface ' +
+ 'offsetSurface openGLExtension openMayaPref optionMenu optionMenuGrp optionVar orbit ' +
+ 'orbitCtx orientConstraint outlinerEditor outlinerPanel overrideModifier ' +
+ 'paintEffectsDisplay pairBlend palettePort paneLayout panel panelConfiguration ' +
+ 'panelHistory paramDimContext paramDimension paramLocator parent parentConstraint ' +
+ 'particle particleExists particleInstancer particleRenderInfo partition pasteKey ' +
+ 'pathAnimation pause pclose percent performanceOptions pfxstrokes pickWalk picture ' +
+ 'pixelMove planarSrf plane play playbackOptions playblast plugAttr plugNode pluginInfo ' +
+ 'pluginResourceUtil pointConstraint pointCurveConstraint pointLight pointMatrixMult ' +
+ 'pointOnCurve pointOnSurface pointPosition poleVectorConstraint polyAppend ' +
+ 'polyAppendFacetCtx polyAppendVertex polyAutoProjection polyAverageNormal ' +
+ 'polyAverageVertex polyBevel polyBlendColor polyBlindData polyBoolOp polyBridgeEdge ' +
+ 'polyCacheMonitor polyCheck polyChipOff polyClipboard polyCloseBorder polyCollapseEdge ' +
+ 'polyCollapseFacet polyColorBlindData polyColorDel polyColorPerVertex polyColorSet ' +
+ 'polyCompare polyCone polyCopyUV polyCrease polyCreaseCtx polyCreateFacet ' +
+ 'polyCreateFacetCtx polyCube polyCut polyCutCtx polyCylinder polyCylindricalProjection ' +
+ 'polyDelEdge polyDelFacet polyDelVertex polyDuplicateAndConnect polyDuplicateEdge ' +
+ 'polyEditUV polyEditUVShell polyEvaluate polyExtrudeEdge polyExtrudeFacet ' +
+ 'polyExtrudeVertex polyFlipEdge polyFlipUV polyForceUV polyGeoSampler polyHelix ' +
+ 'polyInfo polyInstallAction polyLayoutUV polyListComponentConversion polyMapCut ' +
+ 'polyMapDel polyMapSew polyMapSewMove polyMergeEdge polyMergeEdgeCtx polyMergeFacet ' +
+ 'polyMergeFacetCtx polyMergeUV polyMergeVertex polyMirrorFace polyMoveEdge ' +
+ 'polyMoveFacet polyMoveFacetUV polyMoveUV polyMoveVertex polyNormal polyNormalPerVertex ' +
+ 'polyNormalizeUV polyOptUvs polyOptions polyOutput polyPipe polyPlanarProjection ' +
+ 'polyPlane polyPlatonicSolid polyPoke polyPrimitive polyPrism polyProjection ' +
+ 'polyPyramid polyQuad polyQueryBlindData polyReduce polySelect polySelectConstraint ' +
+ 'polySelectConstraintMonitor polySelectCtx polySelectEditCtx polySeparate ' +
+ 'polySetToFaceNormal polySewEdge polyShortestPathCtx polySmooth polySoftEdge ' +
+ 'polySphere polySphericalProjection polySplit polySplitCtx polySplitEdge polySplitRing ' +
+ 'polySplitVertex polyStraightenUVBorder polySubdivideEdge polySubdivideFacet ' +
+ 'polyToSubdiv polyTorus polyTransfer polyTriangulate polyUVSet polyUnite polyWedgeFace ' +
+ 'popen popupMenu pose pow preloadRefEd print progressBar progressWindow projFileViewer ' +
+ 'projectCurve projectTangent projectionContext projectionManip promptDialog propModCtx ' +
+ 'propMove psdChannelOutliner psdEditTextureFile psdExport psdTextureFile putenv pwd ' +
+ 'python querySubdiv quit rad_to_deg radial radioButton radioButtonGrp radioCollection ' +
+ 'radioMenuItemCollection rampColorPort rand randomizeFollicles randstate rangeControl ' +
+ 'readTake rebuildCurve rebuildSurface recordAttr recordDevice redo reference ' +
+ 'referenceEdit referenceQuery refineSubdivSelectionList refresh refreshAE ' +
+ 'registerPluginResource rehash reloadImage removeJoint removeMultiInstance ' +
+ 'removePanelCategory rename renameAttr renameSelectionList renameUI render ' +
+ 'renderGlobalsNode renderInfo renderLayerButton renderLayerParent ' +
+ 'renderLayerPostProcess renderLayerUnparent renderManip renderPartition ' +
+ 'renderQualityNode renderSettings renderThumbnailUpdate renderWindowEditor ' +
+ 'renderWindowSelectContext renderer reorder reorderDeformers requires reroot ' +
+ 'resampleFluid resetAE resetPfxToPolyCamera resetTool resolutionNode retarget ' +
+ 'reverseCurve reverseSurface revolve rgb_to_hsv rigidBody rigidSolver roll rollCtx ' +
+ 'rootOf rot rotate rotationInterpolation roundConstantRadius rowColumnLayout rowLayout ' +
+ 'runTimeCommand runup sampleImage saveAllShelves saveAttrPreset saveFluid saveImage ' +
+ 'saveInitialState saveMenu savePrefObjects savePrefs saveShelf saveToolSettings scale ' +
+ 'scaleBrushBrightness scaleComponents scaleConstraint scaleKey scaleKeyCtx sceneEditor ' +
+ 'sceneUIReplacement scmh scriptCtx scriptEditorInfo scriptJob scriptNode scriptTable ' +
+ 'scriptToShelf scriptedPanel scriptedPanelType scrollField scrollLayout sculpt ' +
+ 'searchPathArray seed selLoadSettings select selectContext selectCurveCV selectKey ' +
+ 'selectKeyCtx selectKeyframeRegionCtx selectMode selectPref selectPriority selectType ' +
+ 'selectedNodes selectionConnection separator setAttr setAttrEnumResource ' +
+ 'setAttrMapping setAttrNiceNameResource setConstraintRestPosition ' +
+ 'setDefaultShadingGroup setDrivenKeyframe setDynamic setEditCtx setEditor setFluidAttr ' +
+ 'setFocus setInfinity setInputDeviceMapping setKeyCtx setKeyPath setKeyframe ' +
+ 'setKeyframeBlendshapeTargetWts setMenuMode setNodeNiceNameResource setNodeTypeFlag ' +
+ 'setParent setParticleAttr setPfxToPolyCamera setPluginResource setProject ' +
+ 'setStampDensity setStartupMessage setState setToolTo setUITemplate setXformManip sets ' +
+ 'shadingConnection shadingGeometryRelCtx shadingLightRelCtx shadingNetworkCompare ' +
+ 'shadingNode shapeCompare shelfButton shelfLayout shelfTabLayout shellField ' +
+ 'shortNameOf showHelp showHidden showManipCtx showSelectionInTitle ' +
+ 'showShadingGroupAttrEditor showWindow sign simplify sin singleProfileBirailSurface ' +
+ 'size sizeBytes skinCluster skinPercent smoothCurve smoothTangentSurface smoothstep ' +
+ 'snap2to2 snapKey snapMode snapTogetherCtx snapshot soft softMod softModCtx sort sound ' +
+ 'soundControl source spaceLocator sphere sphrand spotLight spotLightPreviewPort ' +
+ 'spreadSheetEditor spring sqrt squareSurface srtContext stackTrace startString ' +
+ 'startsWith stitchAndExplodeShell stitchSurface stitchSurfacePoints strcmp ' +
+ 'stringArrayCatenate stringArrayContains stringArrayCount stringArrayInsertAtIndex ' +
+ 'stringArrayIntersector stringArrayRemove stringArrayRemoveAtIndex ' +
+ 'stringArrayRemoveDuplicates stringArrayRemoveExact stringArrayToString ' +
+ 'stringToStringArray strip stripPrefixFromName stroke subdAutoProjection ' +
+ 'subdCleanTopology subdCollapse subdDuplicateAndConnect subdEditUV ' +
+ 'subdListComponentConversion subdMapCut subdMapSewMove subdMatchTopology subdMirror ' +
+ 'subdToBlind subdToPoly subdTransferUVsToCache subdiv subdivCrease ' +
+ 'subdivDisplaySmoothness substitute substituteAllString substituteGeometry substring ' +
+ 'surface surfaceSampler surfaceShaderList swatchDisplayPort switchTable symbolButton ' +
+ 'symbolCheckBox sysFile system tabLayout tan tangentConstraint texLatticeDeformContext ' +
+ 'texManipContext texMoveContext texMoveUVShellContext texRotateContext texScaleContext ' +
+ 'texSelectContext texSelectShortestPathCtx texSmudgeUVContext texWinToolCtx text ' +
+ 'textCurves textField textFieldButtonGrp textFieldGrp textManip textScrollList ' +
+ 'textToShelf textureDisplacePlane textureHairColor texturePlacementContext ' +
+ 'textureWindow threadCount threePointArcCtx timeControl timePort timerX toNativePath ' +
+ 'toggle toggleAxis toggleWindowVisibility tokenize tokenizeList tolerance tolower ' +
+ 'toolButton toolCollection toolDropped toolHasOptions toolPropertyWindow torus toupper ' +
+ 'trace track trackCtx transferAttributes transformCompare transformLimits translator ' +
+ 'trim trunc truncateFluidCache truncateHairCache tumble tumbleCtx turbulence ' +
+ 'twoPointArcCtx uiRes uiTemplate unassignInputDevice undo undoInfo ungroup uniform unit ' +
+ 'unloadPlugin untangleUV untitledFileName untrim upAxis updateAE userCtx uvLink ' +
+ 'uvSnapshot validateShelfName vectorize view2dToolCtx viewCamera viewClipPlane ' +
+ 'viewFit viewHeadOn viewLookAt viewManip viewPlace viewSet visor volumeAxis vortex ' +
+ 'waitCursor warning webBrowser webBrowserPrefs whatIs window windowPref wire ' +
+ 'wireContext workspace wrinkle wrinkleContext writeTake xbmLangPathList xform',
+ illegal: '</',
+ contains: [
+ hljs.C_NUMBER_MODE,
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ {
+ className: 'string',
+ begin: '`', end: '`',
+ contains: [hljs.BACKSLASH_ESCAPE]
+ },
+ { // eats variables
+ begin: '[\\$\\%\\@](\\^\\w\\b|#\\w+|[^\\s\\w{]|{\\w+}|\\w+)'
+ },
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE
+ ]
+ };
+});
+
+hljs.registerLanguage("mercury",
+/*
+Language: Mercury
+Author: mucaho <mkucko@gmail.com>
+Description: Mercury is a logic/functional programming language which combines the clarity and expressiveness of declarative programming with advanced static analysis and error detection features.
+*/
+
+function(hljs) {
+ var KEYWORDS = {
+ keyword:
+ 'module use_module import_module include_module end_module initialise ' +
+ 'mutable initialize finalize finalise interface implementation pred ' +
+ 'mode func type inst solver any_pred any_func is semidet det nondet ' +
+ 'multi erroneous failure cc_nondet cc_multi typeclass instance where ' +
+ 'pragma promise external trace atomic or_else require_complete_switch ' +
+ 'require_det require_semidet require_multi require_nondet ' +
+ 'require_cc_multi require_cc_nondet require_erroneous require_failure',
+ meta:
+ // pragma
+ 'inline no_inline type_spec source_file fact_table obsolete memo ' +
+ 'loop_check minimal_model terminates does_not_terminate ' +
+ 'check_termination promise_equivalent_clauses ' +
+ // preprocessor
+ 'foreign_proc foreign_decl foreign_code foreign_type ' +
+ 'foreign_import_module foreign_export_enum foreign_export ' +
+ 'foreign_enum may_call_mercury will_not_call_mercury thread_safe ' +
+ 'not_thread_safe maybe_thread_safe promise_pure promise_semipure ' +
+ 'tabled_for_io local untrailed trailed attach_to_io_state ' +
+ 'can_pass_as_mercury_type stable will_not_throw_exception ' +
+ 'may_modify_trail will_not_modify_trail may_duplicate ' +
+ 'may_not_duplicate affects_liveness does_not_affect_liveness ' +
+ 'doesnt_affect_liveness no_sharing unknown_sharing sharing',
+ built_in:
+ 'some all not if then else true fail false try catch catch_any ' +
+ 'semidet_true semidet_false semidet_fail impure_true impure semipure'
+ };
+
+ var COMMENT = hljs.COMMENT('%', '$');
+
+ var NUMCODE = {
+ className: 'number',
+ begin: "0'.\\|0[box][0-9a-fA-F]*"
+ };
+
+ var ATOM = hljs.inherit(hljs.APOS_STRING_MODE, {relevance: 0});
+ var STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, {relevance: 0});
+ var STRING_FMT = {
+ className: 'subst',
+ begin: '\\\\[abfnrtv]\\|\\\\x[0-9a-fA-F]*\\\\\\|%[-+# *.0-9]*[dioxXucsfeEgGp]',
+ relevance: 0
+ };
+ STRING.contains.push(STRING_FMT);
+
+ var IMPLICATION = {
+ className: 'built_in',
+ variants: [
+ {begin: '<=>'},
+ {begin: '<=', relevance: 0},
+ {begin: '=>', relevance: 0},
+ {begin: '/\\\\'},
+ {begin: '\\\\/'}
+ ]
+ };
+
+ var HEAD_BODY_CONJUNCTION = {
+ className: 'built_in',
+ variants: [
+ {begin: ':-\\|-->'},
+ {begin: '=', relevance: 0}
+ ]
+ };
+
+ return {
+ aliases: ['m', 'moo'],
+ keywords: KEYWORDS,
+ contains: [
+ IMPLICATION,
+ HEAD_BODY_CONJUNCTION,
+ COMMENT,
+ hljs.C_BLOCK_COMMENT_MODE,
+ NUMCODE,
+ hljs.NUMBER_MODE,
+ ATOM,
+ STRING,
+ {begin: /:-/} // relevance booster
+ ]
+ };
+});
+
+hljs.registerLanguage("mipsasm",
+/*
+Language: MIPS Assembly
+Author: Nebuleon Fumika <nebuleon.fumika@gmail.com>
+Description: MIPS Assembly (up to MIPS32R2)
+Category: assembler
+*/
+
+function(hljs) {
+ //local labels: %?[FB]?[AT]?\d{1,2}\w+
+ return {
+ case_insensitive: true,
+ aliases: ['mips'],
+ lexemes: '\\.?' + hljs.IDENT_RE,
+ keywords: {
+ meta:
+ //GNU preprocs
+ '.2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .ltorg ',
+ built_in:
+ '$0 $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 ' + // integer registers
+ '$16 $17 $18 $19 $20 $21 $22 $23 $24 $25 $26 $27 $28 $29 $30 $31 ' + // integer registers
+ 'zero at v0 v1 a0 a1 a2 a3 a4 a5 a6 a7 ' + // integer register aliases
+ 't0 t1 t2 t3 t4 t5 t6 t7 t8 t9 s0 s1 s2 s3 s4 s5 s6 s7 s8 ' + // integer register aliases
+ 'k0 k1 gp sp fp ra ' + // integer register aliases
+ '$f0 $f1 $f2 $f2 $f4 $f5 $f6 $f7 $f8 $f9 $f10 $f11 $f12 $f13 $f14 $f15 ' + // floating-point registers
+ '$f16 $f17 $f18 $f19 $f20 $f21 $f22 $f23 $f24 $f25 $f26 $f27 $f28 $f29 $f30 $f31 ' + // floating-point registers
+ 'Context Random EntryLo0 EntryLo1 Context PageMask Wired EntryHi ' + // Coprocessor 0 registers
+ 'HWREna BadVAddr Count Compare SR IntCtl SRSCtl SRSMap Cause EPC PRId ' + // Coprocessor 0 registers
+ 'EBase Config Config1 Config2 Config3 LLAddr Debug DEPC DESAVE CacheErr ' + // Coprocessor 0 registers
+ 'ECC ErrorEPC TagLo DataLo TagHi DataHi WatchLo WatchHi PerfCtl PerfCnt ' // Coprocessor 0 registers
+ },
+ contains: [
+ {
+ className: 'keyword',
+ begin: '\\b('+ //mnemonics
+ // 32-bit integer instructions
+ 'addi?u?|andi?|b(al)?|beql?|bgez(al)?l?|bgtzl?|blezl?|bltz(al)?l?|' +
+ 'bnel?|cl[oz]|divu?|ext|ins|j(al)?|jalr(\.hb)?|jr(\.hb)?|lbu?|lhu?|' +
+ 'll|lui|lw[lr]?|maddu?|mfhi|mflo|movn|movz|move|msubu?|mthi|mtlo|mul|' +
+ 'multu?|nop|nor|ori?|rotrv?|sb|sc|se[bh]|sh|sllv?|slti?u?|srav?|' +
+ 'srlv?|subu?|sw[lr]?|xori?|wsbh|' +
+ // floating-point instructions
+ 'abs\.[sd]|add\.[sd]|alnv.ps|bc1[ft]l?|' +
+ 'c\.(s?f|un|u?eq|[ou]lt|[ou]le|ngle?|seq|l[et]|ng[et])\.[sd]|' +
+ '(ceil|floor|round|trunc)\.[lw]\.[sd]|cfc1|cvt\.d\.[lsw]|' +
+ 'cvt\.l\.[dsw]|cvt\.ps\.s|cvt\.s\.[dlw]|cvt\.s\.p[lu]|cvt\.w\.[dls]|' +
+ 'div\.[ds]|ldx?c1|luxc1|lwx?c1|madd\.[sd]|mfc1|mov[fntz]?\.[ds]|' +
+ 'msub\.[sd]|mth?c1|mul\.[ds]|neg\.[ds]|nmadd\.[ds]|nmsub\.[ds]|' +
+ 'p[lu][lu]\.ps|recip\.fmt|r?sqrt\.[ds]|sdx?c1|sub\.[ds]|suxc1|' +
+ 'swx?c1|' +
+ // system control instructions
+ 'break|cache|d?eret|[de]i|ehb|mfc0|mtc0|pause|prefx?|rdhwr|' +
+ 'rdpgpr|sdbbp|ssnop|synci?|syscall|teqi?|tgei?u?|tlb(p|r|w[ir])|' +
+ 'tlti?u?|tnei?|wait|wrpgpr'+
+ ')',
+ end: '\\s'
+ },
+ hljs.COMMENT('[;#]', '$'),
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.QUOTE_STRING_MODE,
+ {
+ className: 'string',
+ begin: '\'',
+ end: '[^\\\\]\'',
+ relevance: 0
+ },
+ {
+ className: 'title',
+ begin: '\\|', end: '\\|',
+ illegal: '\\n',
+ relevance: 0
+ },
+ {
+ className: 'number',
+ variants: [
+ {begin: '0x[0-9a-f]+'}, //hex
+ {begin: '\\b-?\\d+'} //bare number
+ ],
+ relevance: 0
+ },
+ {
+ className: 'symbol',
+ variants: [
+ {begin: '^\\s*[a-z_\\.\\$][a-z0-9_\\.\\$]+:'}, //GNU MIPS syntax
+ {begin: '^\\s*[0-9]+:'}, // numbered local labels
+ {begin: '[0-9]+[bf]' } // number local label reference (backwards, forwards)
+ ],
+ relevance: 0
+ }
+ ],
+ illegal: '\/'
+ };
+});
+
+hljs.registerLanguage("mizar",
+/*
+Language: Mizar
+Author: Kelley van Evert <kelleyvanevert@gmail.com>
+Category: scientific
+*/
+
+function(hljs) {
+ return {
+ keywords:
+ 'environ vocabularies notations constructors definitions ' +
+ 'registrations theorems schemes requirements begin end definition ' +
+ 'registration cluster existence pred func defpred deffunc theorem ' +
+ 'proof let take assume then thus hence ex for st holds consider ' +
+ 'reconsider such that and in provided of as from be being by means ' +
+ 'equals implies iff redefine define now not or attr is mode ' +
+ 'suppose per cases set thesis contradiction scheme reserve struct ' +
+ 'correctness compatibility coherence symmetry assymetry ' +
+ 'reflexivity irreflexivity connectedness uniqueness commutativity ' +
+ 'idempotence involutiveness projectivity',
+ contains: [
+ hljs.COMMENT('::', '$')
+ ]
+ };
+});
+
+hljs.registerLanguage("perl",
+/*
+Language: Perl
+Author: Peter Leonov <gojpeg@yandex.ru>
+Category: common
+*/
+
+function(hljs) {
+ var PERL_KEYWORDS = 'getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ' +
+ 'ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime ' +
+ 'readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qq' +
+ 'fileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent ' +
+ 'shutdown dump chomp connect getsockname die socketpair close flock exists index shmget' +
+ 'sub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr ' +
+ 'unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 ' +
+ 'getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline ' +
+ 'endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand ' +
+ 'mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink ' +
+ 'getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr ' +
+ 'untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link ' +
+ 'getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller ' +
+ 'lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and ' +
+ 'sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 ' +
+ 'chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach ' +
+ 'tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedir' +
+ 'ioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe ' +
+ 'atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when';
+ var SUBST = {
+ className: 'subst',
+ begin: '[$@]\\{', end: '\\}',
+ keywords: PERL_KEYWORDS
+ };
+ var METHOD = {
+ begin: '->{', end: '}'
+ // contains defined later
+ };
+ var VAR = {
+ variants: [
+ {begin: /\$\d/},
+ {begin: /[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},
+ {begin: /[\$%@][^\s\w{]/, relevance: 0}
+ ]
+ };
+ var STRING_CONTAINS = [hljs.BACKSLASH_ESCAPE, SUBST, VAR];
+ var PERL_DEFAULT_CONTAINS = [
+ VAR,
+ hljs.HASH_COMMENT_MODE,
+ hljs.COMMENT(
+ '^\\=\\w',
+ '\\=cut',
+ {
+ endsWithParent: true
+ }
+ ),
+ METHOD,
+ {
+ className: 'string',
+ contains: STRING_CONTAINS,
+ variants: [
+ {
+ begin: 'q[qwxr]?\\s*\\(', end: '\\)',
+ relevance: 5
+ },
+ {
+ begin: 'q[qwxr]?\\s*\\[', end: '\\]',
+ relevance: 5
+ },
+ {
+ begin: 'q[qwxr]?\\s*\\{', end: '\\}',
+ relevance: 5
+ },
+ {
+ begin: 'q[qwxr]?\\s*\\|', end: '\\|',
+ relevance: 5
+ },
+ {
+ begin: 'q[qwxr]?\\s*\\<', end: '\\>',
+ relevance: 5
+ },
+ {
+ begin: 'qw\\s+q', end: 'q',
+ relevance: 5
+ },
+ {
+ begin: '\'', end: '\'',
+ contains: [hljs.BACKSLASH_ESCAPE]
+ },
+ {
+ begin: '"', end: '"'
+ },
+ {
+ begin: '`', end: '`',
+ contains: [hljs.BACKSLASH_ESCAPE]
+ },
+ {
+ begin: '{\\w+}',
+ contains: [],
+ relevance: 0
+ },
+ {
+ begin: '\-?\\w+\\s*\\=\\>',
+ contains: [],
+ relevance: 0
+ }
+ ]
+ },
+ {
+ className: 'number',
+ begin: '(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b',
+ relevance: 0
+ },
+ { // regexp container
+ begin: '(\\/\\/|' + hljs.RE_STARTERS_RE + '|\\b(split|return|print|reverse|grep)\\b)\\s*',
+ keywords: 'split return print reverse grep',
+ relevance: 0,
+ contains: [
+ hljs.HASH_COMMENT_MODE,
+ {
+ className: 'regexp',
+ begin: '(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*',
+ relevance: 10
+ },
+ {
+ className: 'regexp',
+ begin: '(m|qr)?/', end: '/[a-z]*',
+ contains: [hljs.BACKSLASH_ESCAPE],
+ relevance: 0 // allows empty "//" which is a common comment delimiter in other languages
+ }
+ ]
+ },
+ {
+ className: 'function',
+ beginKeywords: 'sub', end: '(\\s*\\(.*?\\))?[;{]', excludeEnd: true,
+ relevance: 5,
+ contains: [hljs.TITLE_MODE]
+ },
+ {
+ begin: '-\\w\\b',
+ relevance: 0
+ },
+ {
+ begin: "^__DATA__$",
+ end: "^__END__$",
+ subLanguage: 'mojolicious',
+ contains: [
+ {
+ begin: "^@@.*",
+ end: "$",
+ className: "comment"
+ }
+ ]
+ }
+ ];
+ SUBST.contains = PERL_DEFAULT_CONTAINS;
+ METHOD.contains = PERL_DEFAULT_CONTAINS;
+
+ return {
+ aliases: ['pl', 'pm'],
+ lexemes: /[\w\.]+/,
+ keywords: PERL_KEYWORDS,
+ contains: PERL_DEFAULT_CONTAINS
+ };
+});
+
+hljs.registerLanguage("mojolicious",
+/*
+Language: Mojolicious
+Requires: xml.js, perl.js
+Author: Dotan Dimet <dotan@corky.net>
+Description: Mojolicious .ep (Embedded Perl) templates
+Category: template
+*/
+function(hljs) {
+ return {
+ subLanguage: 'xml',
+ contains: [
+ {
+ className: 'meta',
+ begin: '^__(END|DATA)__$'
+ },
+ // mojolicious line
+ {
+ begin: "^\\s*%{1,2}={0,2}", end: '$',
+ subLanguage: 'perl'
+ },
+ // mojolicious block
+ {
+ begin: "<%{1,2}={0,2}",
+ end: "={0,1}%>",
+ subLanguage: 'perl',
+ excludeBegin: true,
+ excludeEnd: true
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("monkey",
+/*
+Language: Monkey
+Author: Arthur Bikmullin <devolonter@gmail.com>
+*/
+
+function(hljs) {
+ var NUMBER = {
+ className: 'number', relevance: 0,
+ variants: [
+ {
+ begin: '[$][a-fA-F0-9]+'
+ },
+ hljs.NUMBER_MODE
+ ]
+ };
+
+ return {
+ case_insensitive: true,
+ keywords: {
+ keyword: 'public private property continue exit extern new try catch ' +
+ 'eachin not abstract final select case default const local global field ' +
+ 'end if then else elseif endif while wend repeat until forever for ' +
+ 'to step next return module inline throw import',
+
+ built_in: 'DebugLog DebugStop Error Print ACos ACosr ASin ASinr ATan ATan2 ATan2r ATanr Abs Abs Ceil ' +
+ 'Clamp Clamp Cos Cosr Exp Floor Log Max Max Min Min Pow Sgn Sgn Sin Sinr Sqrt Tan Tanr Seed PI HALFPI TWOPI',
+
+ literal: 'true false null and or shl shr mod'
+ },
+ illegal: /\/\*/,
+ contains: [
+ hljs.COMMENT('#rem', '#end'),
+ hljs.COMMENT(
+ "'",
+ '$',
+ {
+ relevance: 0
+ }
+ ),
+ {
+ className: 'function',
+ beginKeywords: 'function method', end: '[(=:]|$',
+ illegal: /\n/,
+ contains: [
+ hljs.UNDERSCORE_TITLE_MODE
+ ]
+ },
+ {
+ className: 'class',
+ beginKeywords: 'class interface', end: '$',
+ contains: [
+ {
+ beginKeywords: 'extends implements'
+ },
+ hljs.UNDERSCORE_TITLE_MODE
+ ]
+ },
+ {
+ className: 'built_in',
+ begin: '\\b(self|super)\\b'
+ },
+ {
+ className: 'meta',
+ begin: '\\s*#', end: '$',
+ keywords: {'meta-keyword': 'if else elseif endif end then'}
+ },
+ {
+ className: 'meta',
+ begin: '^\\s*strict\\b'
+ },
+ {
+ beginKeywords: 'alias', end: '=',
+ contains: [hljs.UNDERSCORE_TITLE_MODE]
+ },
+ hljs.QUOTE_STRING_MODE,
+ NUMBER
+ ]
+ }
+});
+
+hljs.registerLanguage("moonscript",
+/*
+Language: MoonScript
+Author: Billy Quith <chinbillybilbo@gmail.com>
+Description: MoonScript is a programming language that transcompiles to Lua. For info about language see http://moonscript.org/
+Origin: coffeescript.js
+Category: scripting
+*/
+
+function(hljs) {
+ var KEYWORDS = {
+ keyword:
+ // Moonscript keywords
+ 'if then not for in while do return else elseif break continue switch and or ' +
+ 'unless when class extends super local import export from using',
+ literal:
+ 'true false nil',
+ built_in:
+ '_G _VERSION assert collectgarbage dofile error getfenv getmetatable ipairs load ' +
+ 'loadfile loadstring module next pairs pcall print rawequal rawget rawset require ' +
+ 'select setfenv setmetatable tonumber tostring type unpack xpcall coroutine debug ' +
+ 'io math os package string table'
+ };
+ var JS_IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';
+ var SUBST = {
+ className: 'subst',
+ begin: /#\{/, end: /}/,
+ keywords: KEYWORDS
+ };
+ var EXPRESSIONS = [
+ hljs.inherit(hljs.C_NUMBER_MODE,
+ {starts: {end: '(\\s*/)?', relevance: 0}}), // a number tries to eat the following slash to prevent treating it as a regexp
+ {
+ className: 'string',
+ variants: [
+ {
+ begin: /'/, end: /'/,
+ contains: [hljs.BACKSLASH_ESCAPE]
+ },
+ {
+ begin: /"/, end: /"/,
+ contains: [hljs.BACKSLASH_ESCAPE, SUBST]
+ }
+ ]
+ },
+ {
+ className: 'built_in',
+ begin: '@__' + hljs.IDENT_RE
+ },
+ {
+ begin: '@' + hljs.IDENT_RE // relevance booster on par with CoffeeScript
+ },
+ {
+ begin: hljs.IDENT_RE + '\\\\' + hljs.IDENT_RE // inst\method
+ }
+ ];
+ SUBST.contains = EXPRESSIONS;
+
+ var TITLE = hljs.inherit(hljs.TITLE_MODE, {begin: JS_IDENT_RE});
+ var PARAMS_RE = '(\\(.*\\))?\\s*\\B[-=]>';
+ var PARAMS = {
+ className: 'params',
+ begin: '\\([^\\(]', returnBegin: true,
+ /* We need another contained nameless mode to not have every nested
+ pair of parens to be called "params" */
+ contains: [{
+ begin: /\(/, end: /\)/,
+ keywords: KEYWORDS,
+ contains: ['self'].concat(EXPRESSIONS)
+ }]
+ };
+
+ return {
+ aliases: ['moon'],
+ keywords: KEYWORDS,
+ illegal: /\/\*/,
+ contains: EXPRESSIONS.concat([
+ hljs.COMMENT('--', '$'),
+ {
+ className: 'function', // function: -> =>
+ begin: '^\\s*' + JS_IDENT_RE + '\\s*=\\s*' + PARAMS_RE, end: '[-=]>',
+ returnBegin: true,
+ contains: [TITLE, PARAMS]
+ },
+ {
+ begin: /[\(,:=]\s*/, // anonymous function start
+ relevance: 0,
+ contains: [
+ {
+ className: 'function',
+ begin: PARAMS_RE, end: '[-=]>',
+ returnBegin: true,
+ contains: [PARAMS]
+ }
+ ]
+ },
+ {
+ className: 'class',
+ beginKeywords: 'class',
+ end: '$',
+ illegal: /[:="\[\]]/,
+ contains: [
+ {
+ beginKeywords: 'extends',
+ endsWithParent: true,
+ illegal: /[:="\[\]]/,
+ contains: [TITLE]
+ },
+ TITLE
+ ]
+ },
+ {
+ className: 'name', // table
+ begin: JS_IDENT_RE + ':', end: ':',
+ returnBegin: true, returnEnd: true,
+ relevance: 0
+ }
+ ])
+ };
+});
+
+hljs.registerLanguage("nginx",
+/*
+Language: Nginx
+Author: Peter Leonov <gojpeg@yandex.ru>
+Contributors: Ivan Sagalaev <maniac@softwaremaniacs.org>
+Category: common, config
+*/
+
+function(hljs) {
+ var VAR = {
+ className: 'variable',
+ variants: [
+ {begin: /\$\d+/},
+ {begin: /\$\{/, end: /}/},
+ {begin: '[\\$\\@]' + hljs.UNDERSCORE_IDENT_RE}
+ ]
+ };
+ var DEFAULT = {
+ endsWithParent: true,
+ lexemes: '[a-z/_]+',
+ keywords: {
+ literal:
+ 'on off yes no true false none blocked debug info notice warn error crit ' +
+ 'select break last permanent redirect kqueue rtsig epoll poll /dev/poll'
+ },
+ relevance: 0,
+ illegal: '=>',
+ contains: [
+ hljs.HASH_COMMENT_MODE,
+ {
+ className: 'string',
+ contains: [hljs.BACKSLASH_ESCAPE, VAR],
+ variants: [
+ {begin: /"/, end: /"/},
+ {begin: /'/, end: /'/}
+ ]
+ },
+ // this swallows entire URLs to avoid detecting numbers within
+ {
+ begin: '([a-z]+):/', end: '\\s', endsWithParent: true, excludeEnd: true,
+ contains: [VAR]
+ },
+ {
+ className: 'regexp',
+ contains: [hljs.BACKSLASH_ESCAPE, VAR],
+ variants: [
+ {begin: "\\s\\^", end: "\\s|{|;", returnEnd: true},
+ // regexp locations (~, ~*)
+ {begin: "~\\*?\\s+", end: "\\s|{|;", returnEnd: true},
+ // *.example.com
+ {begin: "\\*(\\.[a-z\\-]+)+"},
+ // sub.example.*
+ {begin: "([a-z\\-]+\\.)+\\*"}
+ ]
+ },
+ // IP
+ {
+ className: 'number',
+ begin: '\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b'
+ },
+ // units
+ {
+ className: 'number',
+ begin: '\\b\\d+[kKmMgGdshdwy]*\\b',
+ relevance: 0
+ },
+ VAR
+ ]
+ };
+
+ return {
+ aliases: ['nginxconf'],
+ contains: [
+ hljs.HASH_COMMENT_MODE,
+ {
+ begin: hljs.UNDERSCORE_IDENT_RE + '\\s+{', returnBegin: true,
+ end: '{',
+ contains: [
+ {
+ className: 'section',
+ begin: hljs.UNDERSCORE_IDENT_RE
+ }
+ ],
+ relevance: 0
+ },
+ {
+ begin: hljs.UNDERSCORE_IDENT_RE + '\\s', end: ';|{', returnBegin: true,
+ contains: [
+ {
+ className: 'attribute',
+ begin: hljs.UNDERSCORE_IDENT_RE,
+ starts: DEFAULT
+ }
+ ],
+ relevance: 0
+ }
+ ],
+ illegal: '[^\\s\\}]'
+ };
+});
+
+hljs.registerLanguage("nimrod",
+/*
+Language: Nimrod
+*/
+
+function(hljs) {
+ return {
+ aliases: ['nim'],
+ keywords: {
+ keyword:
+ 'addr and as asm bind block break case cast const continue converter ' +
+ 'discard distinct div do elif else end enum except export finally ' +
+ 'for from generic if import in include interface is isnot iterator ' +
+ 'let macro method mixin mod nil not notin object of or out proc ptr ' +
+ 'raise ref return shl shr static template try tuple type using var ' +
+ 'when while with without xor yield',
+ literal:
+ 'shared guarded stdin stdout stderr result true false',
+ built_in:
+ 'int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 float ' +
+ 'float32 float64 bool char string cstring pointer expr stmt void ' +
+ 'auto any range array openarray varargs seq set clong culong cchar ' +
+ 'cschar cshort cint csize clonglong cfloat cdouble clongdouble ' +
+ 'cuchar cushort cuint culonglong cstringarray semistatic'
+ },
+ contains: [ {
+ className: 'meta', // Actually pragma
+ begin: /{\./,
+ end: /\.}/,
+ relevance: 10
+ }, {
+ className: 'string',
+ begin: /[a-zA-Z]\w*"/,
+ end: /"/,
+ contains: [{begin: /""/}]
+ }, {
+ className: 'string',
+ begin: /([a-zA-Z]\w*)?"""/,
+ end: /"""/
+ },
+ hljs.QUOTE_STRING_MODE,
+ {
+ className: 'type',
+ begin: /\b[A-Z]\w+\b/,
+ relevance: 0
+ }, {
+ className: 'number',
+ relevance: 0,
+ variants: [
+ {begin: /\b(0[xX][0-9a-fA-F][_0-9a-fA-F]*)('?[iIuU](8|16|32|64))?/},
+ {begin: /\b(0o[0-7][_0-7]*)('?[iIuUfF](8|16|32|64))?/},
+ {begin: /\b(0(b|B)[01][_01]*)('?[iIuUfF](8|16|32|64))?/},
+ {begin: /\b(\d[_\d]*)('?[iIuUfF](8|16|32|64))?/}
+ ]
+ },
+ hljs.HASH_COMMENT_MODE
+ ]
+ }
+});
+
+hljs.registerLanguage("nix",
+/*
+Language: Nix
+Author: Domen Kožar <domen@dev.si>
+Description: Nix functional language. See http://nixos.org/nix
+*/
+
+
+function(hljs) {
+ var NIX_KEYWORDS = {
+ keyword:
+ 'rec with let in inherit assert if else then',
+ literal:
+ 'true false or and null',
+ built_in:
+ 'import abort baseNameOf dirOf isNull builtins map removeAttrs throw ' +
+ 'toString derivation'
+ };
+ var ANTIQUOTE = {
+ className: 'subst',
+ begin: /\$\{/,
+ end: /}/,
+ keywords: NIX_KEYWORDS
+ };
+ var ATTRS = {
+ begin: /[a-zA-Z0-9-_]+(\s*=)/, returnBegin: true,
+ relevance: 0,
+ contains: [
+ {
+ className: 'attr',
+ begin: /\S+/
+ }
+ ]
+ };
+ var STRING = {
+ className: 'string',
+ contains: [ANTIQUOTE],
+ variants: [
+ {begin: "''", end: "''"},
+ {begin: '"', end: '"'}
+ ]
+ };
+ var EXPRESSIONS = [
+ hljs.NUMBER_MODE,
+ hljs.HASH_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ STRING,
+ ATTRS
+ ];
+ ANTIQUOTE.contains = EXPRESSIONS;
+ return {
+ aliases: ["nixos"],
+ keywords: NIX_KEYWORDS,
+ contains: EXPRESSIONS
+ };
+});
+
+hljs.registerLanguage("nsis",
+/*
+Language: NSIS
+Description: Nullsoft Scriptable Install System
+Author: Jan T. Sott <jan.sott@gmail.com>
+Website: http://github.com/idleberg
+*/
+
+function(hljs) {
+ var CONSTANTS = {
+ className: 'variable',
+ begin: '\\$(ADMINTOOLS|APPDATA|CDBURN_AREA|CMDLINE|COMMONFILES32|COMMONFILES64|COMMONFILES|COOKIES|DESKTOP|DOCUMENTS|EXEDIR|EXEFILE|EXEPATH|FAVORITES|FONTS|HISTORY|HWNDPARENT|INSTDIR|INTERNET_CACHE|LANGUAGE|LOCALAPPDATA|MUSIC|NETHOOD|OUTDIR|PICTURES|PLUGINSDIR|PRINTHOOD|PROFILE|PROGRAMFILES32|PROGRAMFILES64|PROGRAMFILES|QUICKLAUNCH|RECENT|RESOURCES_LOCALIZED|RESOURCES|SENDTO|SMPROGRAMS|SMSTARTUP|STARTMENU|SYSDIR|TEMP|TEMPLATES|VIDEOS|WINDIR)'
+ };
+
+ var DEFINES = {
+ // ${defines}
+ className: 'variable',
+ begin: '\\$+{[a-zA-Z0-9_]+}'
+ };
+
+ var VARIABLES = {
+ // $variables
+ className: 'variable',
+ begin: '\\$+[a-zA-Z0-9_]+',
+ illegal: '\\(\\){}'
+ };
+
+ var LANGUAGES = {
+ // $(language_strings)
+ className: 'variable',
+ begin: '\\$+\\([a-zA-Z0-9_]+\\)'
+ };
+
+ var PARAMETERS = {
+ // command parameters
+ className: 'built_in',
+ begin: '(ARCHIVE|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_OFFLINE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY|HKCR|HKCU|HKDD|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_DYN_DATA|HKEY_LOCAL_MACHINE|HKEY_PERFORMANCE_DATA|HKEY_USERS|HKLM|HKPD|HKU|IDABORT|IDCANCEL|IDIGNORE|IDNO|IDOK|IDRETRY|IDYES|MB_ABORTRETRYIGNORE|MB_DEFBUTTON1|MB_DEFBUTTON2|MB_DEFBUTTON3|MB_DEFBUTTON4|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_RIGHT|MB_RTLREADING|MB_SETFOREGROUND|MB_TOPMOST|MB_USERICON|MB_YESNO|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SYSTEM|TEMPORARY)'
+ };
+
+ var COMPILER ={
+ // !compiler_flags
+ className: 'keyword',
+ begin: '\\!(addincludedir|addplugindir|appendfile|cd|define|delfile|echo|else|endif|error|execute|finalize|getdllversionsystem|ifdef|ifmacrodef|ifmacrondef|ifndef|if|include|insertmacro|macroend|macro|makensis|packhdr|searchparse|searchreplace|tempfile|undef|verbose|warning)'
+ };
+
+ return {
+ case_insensitive: false,
+ keywords: {
+ keyword:
+ 'Abort AddBrandingImage AddSize AllowRootDirInstall AllowSkipFiles AutoCloseWindow BGFont BGGradient BrandingText BringToFront Call CallInstDLL Caption ChangeUI CheckBitmap ClearErrors CompletedText ComponentText CopyFiles CRCCheck CreateDirectory CreateFont CreateShortCut Delete DeleteINISec DeleteINIStr DeleteRegKey DeleteRegValue DetailPrint DetailsButtonText DirText DirVar DirVerify EnableWindow EnumRegKey EnumRegValue Exch Exec ExecShell ExecWait ExpandEnvStrings File FileBufSize FileClose FileErrorText FileOpen FileRead FileReadByte FileReadUTF16LE FileReadWord FileSeek FileWrite FileWriteByte FileWriteUTF16LE FileWriteWord FindClose FindFirst FindNext FindWindow FlushINI FunctionEnd GetCurInstType GetCurrentAddress GetDlgItem GetDLLVersion GetDLLVersionLocal GetErrorLevel GetFileTime GetFileTimeLocal GetFullPathName GetFunctionAddress GetInstDirError GetLabelAddress GetTempFileName Goto HideWindow Icon IfAbort IfErrors IfFileExists IfRebootFlag IfSilent InitPluginsDir InstallButtonText InstallColors InstallDir InstallDirRegKey InstProgressFlags InstType InstTypeGetText InstTypeSetText IntCmp IntCmpU IntFmt IntOp IsWindow LangString LicenseBkColor LicenseData LicenseForceSelection LicenseLangString LicenseText LoadLanguageFile LockWindow LogSet LogText ManifestDPIAware ManifestSupportedOS MessageBox MiscButtonText Name Nop OutFile Page PageCallbacks PageExEnd Pop Push Quit ReadEnvStr ReadINIStr ReadRegDWORD ReadRegStr Reboot RegDLL Rename RequestExecutionLevel ReserveFile Return RMDir SearchPath SectionEnd SectionGetFlags SectionGetInstTypes SectionGetSize SectionGetText SectionGroupEnd SectionIn SectionSetFlags SectionSetInstTypes SectionSetSize SectionSetText SendMessage SetAutoClose SetBrandingImage SetCompress SetCompressor SetCompressorDictSize SetCtlColors SetCurInstType SetDatablockOptimize SetDateSave SetDetailsPrint SetDetailsView SetErrorLevel SetErrors SetFileAttributes SetFont SetOutPath SetOverwrite SetPluginUnload SetRebootFlag SetRegView SetShellVarContext SetSilent ShowInstDetails ShowUninstDetails ShowWindow SilentInstall SilentUnInstall Sleep SpaceTexts StrCmp StrCmpS StrCpy StrLen SubCaption SubSectionEnd Unicode UninstallButtonText UninstallCaption UninstallIcon UninstallSubCaption UninstallText UninstPage UnRegDLL Var VIAddVersionKey VIFileVersion VIProductVersion WindowIcon WriteINIStr WriteRegBin WriteRegDWORD WriteRegExpandStr WriteRegStr WriteUninstaller XPStyle',
+ literal:
+ 'admin all auto both colored current false force hide highest lastused leave listonly none normal notset off on open print show silent silentlog smooth textonly true user '
+ },
+ contains: [
+ hljs.HASH_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ {
+ className: 'string',
+ begin: '"', end: '"',
+ illegal: '\\n',
+ contains: [
+ { // $\n, $\r, $\t, $$
+ begin: '\\$(\\\\(n|r|t)|\\$)'
+ },
+ CONSTANTS,
+ DEFINES,
+ VARIABLES,
+ LANGUAGES
+ ]
+ },
+ hljs.COMMENT(
+ ';',
+ '$',
+ {
+ relevance: 0
+ }
+ ),
+ {
+ className: 'function',
+ beginKeywords: 'Function PageEx Section SectionGroup SubSection', end: '$'
+ },
+ COMPILER,
+ DEFINES,
+ VARIABLES,
+ LANGUAGES,
+ PARAMETERS,
+ hljs.NUMBER_MODE,
+ { // plug::ins
+ begin: hljs.IDENT_RE + '::' + hljs.IDENT_RE
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("objectivec",
+/*
+Language: Objective-C
+Author: Valerii Hiora <valerii.hiora@gmail.com>
+Contributors: Angel G. Olloqui <angelgarcia.mail@gmail.com>, Matt Diephouse <matt@diephouse.com>, Andrew Farmer <ahfarmer@gmail.com>, Minh Nguyễn <mxn@1ec5.org>
+Category: common
+*/
+
+function(hljs) {
+ var API_CLASS = {
+ className: 'built_in',
+ begin: '\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+',
+ };
+ var OBJC_KEYWORDS = {
+ keyword:
+ 'int float while char export sizeof typedef const struct for union ' +
+ 'unsigned long volatile static bool mutable if do return goto void ' +
+ 'enum else break extern asm case short default double register explicit ' +
+ 'signed typename this switch continue wchar_t inline readonly assign ' +
+ 'readwrite self @synchronized id typeof ' +
+ 'nonatomic super unichar IBOutlet IBAction strong weak copy ' +
+ 'in out inout bycopy byref oneway __strong __weak __block __autoreleasing ' +
+ '@private @protected @public @try @property @end @throw @catch @finally ' +
+ '@autoreleasepool @synthesize @dynamic @selector @optional @required ' +
+ '@encode @package @import @defs @compatibility_alias ' +
+ '__bridge __bridge_transfer __bridge_retained __bridge_retain ' +
+ '__covariant __contravariant __kindof ' +
+ '_Nonnull _Nullable _Null_unspecified ' +
+ '__FUNCTION__ __PRETTY_FUNCTION__ __attribute__ ' +
+ 'getter setter retain unsafe_unretained ' +
+ 'nonnull nullable null_unspecified null_resettable class instancetype ' +
+ 'NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER ' +
+ 'NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED ' +
+ 'NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE ' +
+ 'NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END ' +
+ 'NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW ' +
+ 'NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN',
+ literal:
+ 'false true FALSE TRUE nil YES NO NULL',
+ built_in:
+ 'BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once'
+ };
+ var LEXEMES = /[a-zA-Z@][a-zA-Z0-9_]*/;
+ var CLASS_KEYWORDS = '@interface @class @protocol @implementation';
+ return {
+ aliases: ['mm', 'objc', 'obj-c'],
+ keywords: OBJC_KEYWORDS,
+ lexemes: LEXEMES,
+ illegal: '</',
+ contains: [
+ API_CLASS,
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.C_NUMBER_MODE,
+ hljs.QUOTE_STRING_MODE,
+ {
+ className: 'string',
+ variants: [
+ {
+ begin: '@"', end: '"',
+ illegal: '\\n',
+ contains: [hljs.BACKSLASH_ESCAPE]
+ },
+ {
+ begin: '\'', end: '[^\\\\]\'',
+ illegal: '[^\\\\][^\']'
+ }
+ ]
+ },
+ {
+ className: 'meta',
+ begin: '#',
+ end: '$',
+ contains: [
+ {
+ className: 'meta-string',
+ variants: [
+ { begin: '\"', end: '\"' },
+ { begin: '<', end: '>' }
+ ]
+ }
+ ]
+ },
+ {
+ className: 'class',
+ begin: '(' + CLASS_KEYWORDS.split(' ').join('|') + ')\\b', end: '({|$)', excludeEnd: true,
+ keywords: CLASS_KEYWORDS, lexemes: LEXEMES,
+ contains: [
+ hljs.UNDERSCORE_TITLE_MODE
+ ]
+ },
+ {
+ begin: '\\.'+hljs.UNDERSCORE_IDENT_RE,
+ relevance: 0
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("ocaml",
+/*
+Language: OCaml
+Author: Mehdi Dogguy <mehdi@dogguy.org>
+Contributors: Nicolas Braud-Santoni <nicolas.braud-santoni@ens-cachan.fr>, Mickael Delahaye <mickael.delahaye@gmail.com>
+Description: OCaml language definition.
+Category: functional
+*/
+function(hljs) {
+ /* missing support for heredoc-like string (OCaml 4.0.2+) */
+ return {
+ aliases: ['ml'],
+ keywords: {
+ keyword:
+ 'and as assert asr begin class constraint do done downto else end ' +
+ 'exception external for fun function functor if in include ' +
+ 'inherit! inherit initializer land lazy let lor lsl lsr lxor match method!|10 method ' +
+ 'mod module mutable new object of open! open or private rec sig struct ' +
+ 'then to try type val! val virtual when while with ' +
+ /* camlp4 */
+ 'parser value',
+ built_in:
+ /* built-in types */
+ 'array bool bytes char exn|5 float int int32 int64 list lazy_t|5 nativeint|5 string unit ' +
+ /* (some) types in Pervasives */
+ 'in_channel out_channel ref',
+ literal:
+ 'true false'
+ },
+ illegal: /\/\/|>>/,
+ lexemes: '[a-z_]\\w*!?',
+ contains: [
+ {
+ className: 'literal',
+ begin: '\\[(\\|\\|)?\\]|\\(\\)',
+ relevance: 0
+ },
+ hljs.COMMENT(
+ '\\(\\*',
+ '\\*\\)',
+ {
+ contains: ['self']
+ }
+ ),
+ { /* type variable */
+ className: 'symbol',
+ begin: '\'[A-Za-z_](?!\')[\\w\']*'
+ /* the grammar is ambiguous on how 'a'b should be interpreted but not the compiler */
+ },
+ { /* polymorphic variant */
+ className: 'type',
+ begin: '`[A-Z][\\w\']*'
+ },
+ { /* module or constructor */
+ className: 'type',
+ begin: '\\b[A-Z][\\w\']*',
+ relevance: 0
+ },
+ { /* don't color identifiers, but safely catch all identifiers with '*/
+ begin: '[a-z_]\\w*\'[\\w\']*', relevance: 0
+ },
+ hljs.inherit(hljs.APOS_STRING_MODE, {className: 'string', relevance: 0}),
+ hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null}),
+ {
+ className: 'number',
+ begin:
+ '\\b(0[xX][a-fA-F0-9_]+[Lln]?|' +
+ '0[oO][0-7_]+[Lln]?|' +
+ '0[bB][01_]+[Lln]?|' +
+ '[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)',
+ relevance: 0
+ },
+ {
+ begin: /[-=]>/ // relevance booster
+ }
+ ]
+ }
+});
+
+hljs.registerLanguage("openscad",
+/*
+Language: OpenSCAD
+Author: Dan Panzarella <alsoelp@gmail.com>
+Description: OpenSCAD is a language for the 3D CAD modeling software of the same name.
+Category: scientific
+*/
+
+function(hljs) {
+ var SPECIAL_VARS = {
+ className: 'keyword',
+ begin: '\\$(f[asn]|t|vp[rtd]|children)'
+ },
+ LITERALS = {
+ className: 'literal',
+ begin: 'false|true|PI|undef'
+ },
+ NUMBERS = {
+ className: 'number',
+ begin: '\\b\\d+(\\.\\d+)?(e-?\\d+)?', //adds 1e5, 1e-10
+ relevance: 0
+ },
+ STRING = hljs.inherit(hljs.QUOTE_STRING_MODE,{illegal: null}),
+ PREPRO = {
+ className: 'meta',
+ keywords: {'meta-keyword': 'include use'},
+ begin: 'include|use <',
+ end: '>'
+ },
+ PARAMS = {
+ className: 'params',
+ begin: '\\(', end: '\\)',
+ contains: ['self', NUMBERS, STRING, SPECIAL_VARS, LITERALS]
+ },
+ MODIFIERS = {
+ begin: '[*!#%]',
+ relevance: 0
+ },
+ FUNCTIONS = {
+ className: 'function',
+ beginKeywords: 'module function',
+ end: '\\=|\\{',
+ contains: [PARAMS, hljs.UNDERSCORE_TITLE_MODE]
+ };
+
+ return {
+ aliases: ['scad'],
+ keywords: {
+ keyword: 'function module include use for intersection_for if else \\%',
+ literal: 'false true PI undef',
+ built_in: 'circle square polygon text sphere cube cylinder polyhedron translate rotate scale resize mirror multmatrix color offset hull minkowski union difference intersection abs sign sin cos tan acos asin atan atan2 floor round ceil ln log pow sqrt exp rands min max concat lookup str chr search version version_num norm cross parent_module echo import import_dxf dxf_linear_extrude linear_extrude rotate_extrude surface projection render children dxf_cross dxf_dim let assign'
+ },
+ contains: [
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ NUMBERS,
+ PREPRO,
+ STRING,
+ SPECIAL_VARS,
+ MODIFIERS,
+ FUNCTIONS
+ ]
+ }
+});
+
+hljs.registerLanguage("oxygene",
+/*
+Language: Oxygene
+Author: Carlo Kok <ck@remobjects.com>
+Description: Language definition for RemObjects Oxygene (http://www.remobjects.com)
+*/
+
+function(hljs) {
+ var OXYGENE_KEYWORDS = 'abstract add and array as asc aspect assembly async begin break block by case class concat const copy constructor continue '+
+ 'create default delegate desc distinct div do downto dynamic each else empty end ensure enum equals event except exit extension external false '+
+ 'final finalize finalizer finally flags for forward from function future global group has if implementation implements implies in index inherited '+
+ 'inline interface into invariants is iterator join locked locking loop matching method mod module namespace nested new nil not notify nullable of '+
+ 'old on operator or order out override parallel params partial pinned private procedure property protected public queryable raise read readonly '+
+ 'record reintroduce remove repeat require result reverse sealed select self sequence set shl shr skip static step soft take then to true try tuple '+
+ 'type union unit unsafe until uses using var virtual raises volatile where while with write xor yield await mapped deprecated stdcall cdecl pascal '+
+ 'register safecall overload library platform reference packed strict published autoreleasepool selector strong weak unretained';
+ var CURLY_COMMENT = hljs.COMMENT(
+ '{',
+ '}',
+ {
+ relevance: 0
+ }
+ );
+ var PAREN_COMMENT = hljs.COMMENT(
+ '\\(\\*',
+ '\\*\\)',
+ {
+ relevance: 10
+ }
+ );
+ var STRING = {
+ className: 'string',
+ begin: '\'', end: '\'',
+ contains: [{begin: '\'\''}]
+ };
+ var CHAR_STRING = {
+ className: 'string', begin: '(#\\d+)+'
+ };
+ var FUNCTION = {
+ className: 'function',
+ beginKeywords: 'function constructor destructor procedure method', end: '[:;]',
+ keywords: 'function constructor|10 destructor|10 procedure|10 method|10',
+ contains: [
+ hljs.TITLE_MODE,
+ {
+ className: 'params',
+ begin: '\\(', end: '\\)',
+ keywords: OXYGENE_KEYWORDS,
+ contains: [STRING, CHAR_STRING]
+ },
+ CURLY_COMMENT, PAREN_COMMENT
+ ]
+ };
+ return {
+ case_insensitive: true,
+ lexemes: /\.?\w+/,
+ keywords: OXYGENE_KEYWORDS,
+ illegal: '("|\\$[G-Zg-z]|\\/\\*|</|=>|->)',
+ contains: [
+ CURLY_COMMENT, PAREN_COMMENT, hljs.C_LINE_COMMENT_MODE,
+ STRING, CHAR_STRING,
+ hljs.NUMBER_MODE,
+ FUNCTION,
+ {
+ className: 'class',
+ begin: '=\\bclass\\b', end: 'end;',
+ keywords: OXYGENE_KEYWORDS,
+ contains: [
+ STRING, CHAR_STRING,
+ CURLY_COMMENT, PAREN_COMMENT, hljs.C_LINE_COMMENT_MODE,
+ FUNCTION
+ ]
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("parser3",
+/*
+Language: Parser3
+Requires: xml.js
+Author: Oleg Volchkov <oleg@volchkov.net>
+Category: template
+*/
+
+function(hljs) {
+ var CURLY_SUBCOMMENT = hljs.COMMENT(
+ '{',
+ '}',
+ {
+ contains: ['self']
+ }
+ );
+ return {
+ subLanguage: 'xml', relevance: 0,
+ contains: [
+ hljs.COMMENT('^#', '$'),
+ hljs.COMMENT(
+ '\\^rem{',
+ '}',
+ {
+ relevance: 10,
+ contains: [
+ CURLY_SUBCOMMENT
+ ]
+ }
+ ),
+ {
+ className: 'meta',
+ begin: '^@(?:BASE|USE|CLASS|OPTIONS)$',
+ relevance: 10
+ },
+ {
+ className: 'title',
+ begin: '@[\\w\\-]+\\[[\\w^;\\-]*\\](?:\\[[\\w^;\\-]*\\])?(?:.*)$'
+ },
+ {
+ className: 'variable',
+ begin: '\\$\\{?[\\w\\-\\.\\:]+\\}?'
+ },
+ {
+ className: 'keyword',
+ begin: '\\^[\\w\\-\\.\\:]+'
+ },
+ {
+ className: 'number',
+ begin: '\\^#[0-9a-fA-F]+'
+ },
+ hljs.C_NUMBER_MODE
+ ]
+ };
+});
+
+hljs.registerLanguage("pf",
+/*
+Language: pf
+Category: config
+Author: Peter Piwowarski <oldlaptop654@aol.com>
+Description: The pf.conf(5) format as of OpenBSD 5.6
+*/
+
+function(hljs) {
+ var MACRO = {
+ className: 'variable',
+ begin: /\$[\w\d#@][\w\d_]*/
+ };
+ var TABLE = {
+ className: 'variable',
+ begin: /<(?!\/)/, end: />/
+ };
+ var QUOTE_STRING = {
+ className: 'string',
+ begin: /"/, end: /"/
+ };
+
+ return {
+ aliases: ['pf.conf'],
+ lexemes: /[a-z0-9_<>-]+/,
+ keywords: {
+ built_in: /* block match pass are "actions" in pf.conf(5), the rest are
+ * lexically similar top-level commands.
+ */
+ 'block match pass load anchor|5 antispoof|10 set table',
+ keyword:
+ 'in out log quick on rdomain inet inet6 proto from port os to route' +
+ 'allow-opts divert-packet divert-reply divert-to flags group icmp-type' +
+ 'icmp6-type label once probability recieved-on rtable prio queue' +
+ 'tos tag tagged user keep fragment for os drop' +
+ 'af-to|10 binat-to|10 nat-to|10 rdr-to|10 bitmask least-stats random round-robin' +
+ 'source-hash static-port' +
+ 'dup-to reply-to route-to' +
+ 'parent bandwidth default min max qlimit' +
+ 'block-policy debug fingerprints hostid limit loginterface optimization' +
+ 'reassemble ruleset-optimization basic none profile skip state-defaults' +
+ 'state-policy timeout' +
+ 'const counters persist' +
+ 'no modulate synproxy state|5 floating if-bound no-sync pflow|10 sloppy' +
+ 'source-track global rule max-src-nodes max-src-states max-src-conn' +
+ 'max-src-conn-rate overload flush' +
+ 'scrub|5 max-mss min-ttl no-df|10 random-id',
+ literal:
+ 'all any no-route self urpf-failed egress|5 unknown'
+ },
+ contains: [
+ hljs.HASH_COMMENT_MODE,
+ hljs.NUMBER_MODE,
+ hljs.QUOTE_STRING_MODE,
+ MACRO,
+ TABLE
+ ]
+ };
+});
+
+hljs.registerLanguage("php",
+/*
+Language: PHP
+Author: Victor Karamzin <Victor.Karamzin@enterra-inc.com>
+Contributors: Evgeny Stepanischev <imbolk@gmail.com>, Ivan Sagalaev <maniac@softwaremaniacs.org>
+Category: common
+*/
+
+function(hljs) {
+ var VARIABLE = {
+ begin: '\\$+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'
+ };
+ var PREPROCESSOR = {
+ className: 'meta', begin: /<\?(php)?|\?>/
+ };
+ var STRING = {
+ className: 'string',
+ contains: [hljs.BACKSLASH_ESCAPE, PREPROCESSOR],
+ variants: [
+ {
+ begin: 'b"', end: '"'
+ },
+ {
+ begin: 'b\'', end: '\''
+ },
+ hljs.inherit(hljs.APOS_STRING_MODE, {illegal: null}),
+ hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null})
+ ]
+ };
+ var NUMBER = {variants: [hljs.BINARY_NUMBER_MODE, hljs.C_NUMBER_MODE]};
+ return {
+ aliases: ['php3', 'php4', 'php5', 'php6'],
+ case_insensitive: true,
+ keywords:
+ 'and include_once list abstract global private echo interface as static endswitch ' +
+ 'array null if endwhile or const for endforeach self var while isset public ' +
+ 'protected exit foreach throw elseif include __FILE__ empty require_once do xor ' +
+ 'return parent clone use __CLASS__ __LINE__ else break print eval new ' +
+ 'catch __METHOD__ case exception default die require __FUNCTION__ ' +
+ 'enddeclare final try switch continue endfor endif declare unset true false ' +
+ 'trait goto instanceof insteadof __DIR__ __NAMESPACE__ ' +
+ 'yield finally',
+ contains: [
+ hljs.HASH_COMMENT_MODE,
+ hljs.COMMENT('//', '$', {contains: [PREPROCESSOR]}),
+ hljs.COMMENT(
+ '/\\*',
+ '\\*/',
+ {
+ contains: [
+ {
+ className: 'doctag',
+ begin: '@[A-Za-z]+'
+ }
+ ]
+ }
+ ),
+ hljs.COMMENT(
+ '__halt_compiler.+?;',
+ false,
+ {
+ endsWithParent: true,
+ keywords: '__halt_compiler',
+ lexemes: hljs.UNDERSCORE_IDENT_RE
+ }
+ ),
+ {
+ className: 'string',
+ begin: /<<<['"]?\w+['"]?$/, end: /^\w+;?$/,
+ contains: [
+ hljs.BACKSLASH_ESCAPE,
+ {
+ className: 'subst',
+ variants: [
+ {begin: /\$\w+/},
+ {begin: /\{\$/, end: /\}/}
+ ]
+ }
+ ]
+ },
+ PREPROCESSOR,
+ {
+ className: 'keyword', begin: /\$this\b/
+ },
+ VARIABLE,
+ {
+ // swallow composed identifiers to avoid parsing them as keywords
+ begin: /(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/
+ },
+ {
+ className: 'function',
+ beginKeywords: 'function', end: /[;{]/, excludeEnd: true,
+ illegal: '\\$|\\[|%',
+ contains: [
+ hljs.UNDERSCORE_TITLE_MODE,
+ {
+ className: 'params',
+ begin: '\\(', end: '\\)',
+ contains: [
+ 'self',
+ VARIABLE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ STRING,
+ NUMBER
+ ]
+ }
+ ]
+ },
+ {
+ className: 'class',
+ beginKeywords: 'class interface', end: '{', excludeEnd: true,
+ illegal: /[:\(\$"]/,
+ contains: [
+ {beginKeywords: 'extends implements'},
+ hljs.UNDERSCORE_TITLE_MODE
+ ]
+ },
+ {
+ beginKeywords: 'namespace', end: ';',
+ illegal: /[\.']/,
+ contains: [hljs.UNDERSCORE_TITLE_MODE]
+ },
+ {
+ beginKeywords: 'use', end: ';',
+ contains: [hljs.UNDERSCORE_TITLE_MODE]
+ },
+ {
+ begin: '=>' // No markup, just a relevance booster
+ },
+ STRING,
+ NUMBER
+ ]
+ };
+});
+
+hljs.registerLanguage("pony",
+/*
+Language: Pony
+Author: Joe Eli McIlvain <joe.eli.mac@gmail.com>
+Description: Pony is an open-source, object-oriented, actor-model,
+ capabilities-secure, high performance programming language.
+*/
+
+function(hljs) {
+ var KEYWORDS = {
+ keyword:
+ 'actor addressof and as be break class compile_error compile_intrinsic' +
+ 'consume continue delegate digestof do else elseif embed end error' +
+ 'for fun if ifdef in interface is isnt lambda let match new not object' +
+ 'or primitive recover repeat return struct then trait try type until ' +
+ 'use var where while with xor',
+ meta:
+ 'iso val tag trn box ref',
+ literal:
+ 'this false true'
+ };
+
+ var TRIPLE_QUOTE_STRING_MODE = {
+ className: 'string',
+ begin: '"""', end: '"""',
+ relevance: 10
+ };
+
+ var QUOTE_STRING_MODE = {
+ className: 'string',
+ begin: '"', end: '"',
+ contains: [hljs.BACKSLASH_ESCAPE]
+ };
+
+ var SINGLE_QUOTE_CHAR_MODE = {
+ className: 'string',
+ begin: '\'', end: '\'',
+ contains: [hljs.BACKSLASH_ESCAPE],
+ relevance: 0
+ };
+
+ var TYPE_NAME = {
+ className: 'type',
+ begin: '\\b_?[A-Z][\\w]*',
+ relevance: 0
+ };
+
+ var PRIMED_NAME = {
+ begin: hljs.IDENT_RE + '\'', relevance: 0
+ };
+
+ var CLASS = {
+ className: 'class',
+ beginKeywords: 'class actor', end: '$',
+ contains: [
+ hljs.TITLE_MODE,
+ hljs.C_LINE_COMMENT_MODE
+ ]
+ }
+
+ var FUNCTION = {
+ className: 'function',
+ beginKeywords: 'new fun', end: '=>',
+ contains: [
+ hljs.TITLE_MODE,
+ {
+ begin: /\(/, end: /\)/,
+ contains: [
+ TYPE_NAME,
+ PRIMED_NAME,
+ hljs.C_NUMBER_MODE,
+ hljs.C_BLOCK_COMMENT_MODE
+ ]
+ },
+ {
+ begin: /:/, endsWithParent: true,
+ contains: [TYPE_NAME]
+ },
+ hljs.C_LINE_COMMENT_MODE
+ ]
+ }
+
+ return {
+ keywords: KEYWORDS,
+ contains: [
+ CLASS,
+ FUNCTION,
+ TYPE_NAME,
+ TRIPLE_QUOTE_STRING_MODE,
+ QUOTE_STRING_MODE,
+ SINGLE_QUOTE_CHAR_MODE,
+ PRIMED_NAME,
+ hljs.C_NUMBER_MODE,
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE
+ ]
+ };
+});
+
+hljs.registerLanguage("powershell",
+/*
+Language: PowerShell
+Author: David Mohundro <david@mohundro.com>
+Contributors: Nicholas Blumhardt <nblumhardt@nblumhardt.com>, Victor Zhou <OiCMudkips@users.noreply.github.com>
+*/
+
+function(hljs) {
+ var BACKTICK_ESCAPE = {
+ begin: '`[\\s\\S]',
+ relevance: 0
+ };
+ var VAR = {
+ className: 'variable',
+ variants: [
+ {begin: /\$[\w\d][\w\d_:]*/}
+ ]
+ };
+ var LITERAL = {
+ className: 'literal',
+ begin: /\$(null|true|false)\b/
+ };
+ var QUOTE_STRING = {
+ className: 'string',
+ variants: [
+ { begin: /"/, end: /"/ },
+ { begin: /@"/, end: /^"@/ }
+ ],
+ contains: [
+ BACKTICK_ESCAPE,
+ VAR,
+ {
+ className: 'variable',
+ begin: /\$[A-z]/, end: /[^A-z]/
+ }
+ ]
+ };
+ var APOS_STRING = {
+ className: 'string',
+ variants: [
+ { begin: /'/, end: /'/ },
+ { begin: /@'/, end: /^'@/ }
+ ]
+ };
+
+ var PS_HELPTAGS = {
+ className: 'doctag',
+ variants: [
+ /* no paramater help tags */
+ { begin: /\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/ },
+ /* one parameter help tags */
+ { begin: /\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\s+\S+/ }
+ ]
+ };
+ var PS_COMMENT = hljs.inherit(
+ hljs.COMMENT(null, null),
+ {
+ variants: [
+ /* single-line comment */
+ { begin: /#/, end: /$/ },
+ /* multi-line comment */
+ { begin: /<#/, end: /#>/ }
+ ],
+ contains: [PS_HELPTAGS]
+ }
+ );
+
+ return {
+ aliases: ['ps'],
+ lexemes: /-?[A-z\.\-]+/,
+ case_insensitive: true,
+ keywords: {
+ keyword: 'if else foreach return function do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch',
+ built_in: 'Add-Computer Add-Content Add-History Add-JobTrigger Add-Member Add-PSSnapin Add-Type Checkpoint-Computer Clear-Content Clear-EventLog Clear-History Clear-Host Clear-Item Clear-ItemProperty Clear-Variable Compare-Object Complete-Transaction Connect-PSSession Connect-WSMan Convert-Path ConvertFrom-Csv ConvertFrom-Json ConvertFrom-SecureString ConvertFrom-StringData ConvertTo-Csv ConvertTo-Html ConvertTo-Json ConvertTo-SecureString ConvertTo-Xml Copy-Item Copy-ItemProperty Debug-Process Disable-ComputerRestore Disable-JobTrigger Disable-PSBreakpoint Disable-PSRemoting Disable-PSSessionConfiguration Disable-WSManCredSSP Disconnect-PSSession Disconnect-WSMan Disable-ScheduledJob Enable-ComputerRestore Enable-JobTrigger Enable-PSBreakpoint Enable-PSRemoting Enable-PSSessionConfiguration Enable-ScheduledJob Enable-WSManCredSSP Enter-PSSession Exit-PSSession Export-Alias Export-Clixml Export-Console Export-Counter Export-Csv Export-FormatData Export-ModuleMember Export-PSSession ForEach-Object Format-Custom Format-List Format-Table Format-Wide Get-Acl Get-Alias Get-AuthenticodeSignature Get-ChildItem Get-Command Get-ComputerRestorePoint Get-Content Get-ControlPanelItem Get-Counter Get-Credential Get-Culture Get-Date Get-Event Get-EventLog Get-EventSubscriber Get-ExecutionPolicy Get-FormatData Get-Host Get-HotFix Get-Help Get-History Get-IseSnippet Get-Item Get-ItemProperty Get-Job Get-JobTrigger Get-Location Get-Member Get-Module Get-PfxCertificate Get-Process Get-PSBreakpoint Get-PSCallStack Get-PSDrive Get-PSProvider Get-PSSession Get-PSSessionConfiguration Get-PSSnapin Get-Random Get-ScheduledJob Get-ScheduledJobOption Get-Service Get-TraceSource Get-Transaction Get-TypeData Get-UICulture Get-Unique Get-Variable Get-Verb Get-WinEvent Get-WmiObject Get-WSManCredSSP Get-WSManInstance Group-Object Import-Alias Import-Clixml Import-Counter Import-Csv Import-IseSnippet Import-LocalizedData Import-PSSession Import-Module Invoke-AsWorkflow Invoke-Command Invoke-Expression Invoke-History Invoke-Item Invoke-RestMethod Invoke-WebRequest Invoke-WmiMethod Invoke-WSManAction Join-Path Limit-EventLog Measure-Command Measure-Object Move-Item Move-ItemProperty New-Alias New-Event New-EventLog New-IseSnippet New-Item New-ItemProperty New-JobTrigger New-Object New-Module New-ModuleManifest New-PSDrive New-PSSession New-PSSessionConfigurationFile New-PSSessionOption New-PSTransportOption New-PSWorkflowExecutionOption New-PSWorkflowSession New-ScheduledJobOption New-Service New-TimeSpan New-Variable New-WebServiceProxy New-WinEvent New-WSManInstance New-WSManSessionOption Out-Default Out-File Out-GridView Out-Host Out-Null Out-Printer Out-String Pop-Location Push-Location Read-Host Receive-Job Register-EngineEvent Register-ObjectEvent Register-PSSessionConfiguration Register-ScheduledJob Register-WmiEvent Remove-Computer Remove-Event Remove-EventLog Remove-Item Remove-ItemProperty Remove-Job Remove-JobTrigger Remove-Module Remove-PSBreakpoint Remove-PSDrive Remove-PSSession Remove-PSSnapin Remove-TypeData Remove-Variable Remove-WmiObject Remove-WSManInstance Rename-Computer Rename-Item Rename-ItemProperty Reset-ComputerMachinePassword Resolve-Path Restart-Computer Restart-Service Restore-Computer Resume-Job Resume-Service Save-Help Select-Object Select-String Select-Xml Send-MailMessage Set-Acl Set-Alias Set-AuthenticodeSignature Set-Content Set-Date Set-ExecutionPolicy Set-Item Set-ItemProperty Set-JobTrigger Set-Location Set-PSBreakpoint Set-PSDebug Set-PSSessionConfiguration Set-ScheduledJob Set-ScheduledJobOption Set-Service Set-StrictMode Set-TraceSource Set-Variable Set-WmiInstance Set-WSManInstance Set-WSManQuickConfig Show-Command Show-ControlPanelItem Show-EventLog Sort-Object Split-Path Start-Job Start-Process Start-Service Start-Sleep Start-Transaction Start-Transcript Stop-Computer Stop-Job Stop-Process Stop-Service Stop-Transcript Suspend-Job Suspend-Service Tee-Object Test-ComputerSecureChannel Test-Connection Test-ModuleManifest Test-Path Test-PSSessionConfigurationFile Trace-Command Unblock-File Undo-Transaction Unregister-Event Unregister-PSSessionConfiguration Unregister-ScheduledJob Update-FormatData Update-Help Update-List Update-TypeData Use-Transaction Wait-Event Wait-Job Wait-Process Where-Object Write-Debug Write-Error Write-EventLog Write-Host Write-Output Write-Progress Write-Verbose Write-Warning',
+ nomarkup: '-ne -eq -lt -gt -ge -le -not -like -notlike -match -notmatch -contains -notcontains -in -notin -replace'
+ },
+ contains: [
+ BACKTICK_ESCAPE,
+ hljs.NUMBER_MODE,
+ QUOTE_STRING,
+ APOS_STRING,
+ LITERAL,
+ VAR,
+ PS_COMMENT
+ ]
+ };
+});
+
+hljs.registerLanguage("processing",
+/*
+Language: Processing
+Author: Erik Paluka <erik.paluka@gmail.com>
+Category: graphics
+*/
+
+function(hljs) {
+ return {
+ keywords: {
+ keyword: 'BufferedReader PVector PFont PImage PGraphics HashMap boolean byte char color ' +
+ 'double float int long String Array FloatDict FloatList IntDict IntList JSONArray JSONObject ' +
+ 'Object StringDict StringList Table TableRow XML ' +
+ // Java keywords
+ 'false synchronized int abstract float private char boolean static null if const ' +
+ 'for true while long throw strictfp finally protected import native final return void ' +
+ 'enum else break transient new catch instanceof byte super volatile case assert short ' +
+ 'package default double public try this switch continue throws protected public private',
+ literal: 'P2D P3D HALF_PI PI QUARTER_PI TAU TWO_PI',
+ title: 'setup draw',
+ built_in: 'displayHeight displayWidth mouseY mouseX mousePressed pmouseX pmouseY key ' +
+ 'keyCode pixels focused frameCount frameRate height width ' +
+ 'size createGraphics beginDraw createShape loadShape PShape arc ellipse line point ' +
+ 'quad rect triangle bezier bezierDetail bezierPoint bezierTangent curve curveDetail curvePoint ' +
+ 'curveTangent curveTightness shape shapeMode beginContour beginShape bezierVertex curveVertex ' +
+ 'endContour endShape quadraticVertex vertex ellipseMode noSmooth rectMode smooth strokeCap ' +
+ 'strokeJoin strokeWeight mouseClicked mouseDragged mouseMoved mousePressed mouseReleased ' +
+ 'mouseWheel keyPressed keyPressedkeyReleased keyTyped print println save saveFrame day hour ' +
+ 'millis minute month second year background clear colorMode fill noFill noStroke stroke alpha ' +
+ 'blue brightness color green hue lerpColor red saturation modelX modelY modelZ screenX screenY ' +
+ 'screenZ ambient emissive shininess specular add createImage beginCamera camera endCamera frustum ' +
+ 'ortho perspective printCamera printProjection cursor frameRate noCursor exit loop noLoop popStyle ' +
+ 'pushStyle redraw binary boolean byte char float hex int str unbinary unhex join match matchAll nf ' +
+ 'nfc nfp nfs split splitTokens trim append arrayCopy concat expand reverse shorten sort splice subset ' +
+ 'box sphere sphereDetail createInput createReader loadBytes loadJSONArray loadJSONObject loadStrings ' +
+ 'loadTable loadXML open parseXML saveTable selectFolder selectInput beginRaw beginRecord createOutput ' +
+ 'createWriter endRaw endRecord PrintWritersaveBytes saveJSONArray saveJSONObject saveStream saveStrings ' +
+ 'saveXML selectOutput popMatrix printMatrix pushMatrix resetMatrix rotate rotateX rotateY rotateZ scale ' +
+ 'shearX shearY translate ambientLight directionalLight lightFalloff lights lightSpecular noLights normal ' +
+ 'pointLight spotLight image imageMode loadImage noTint requestImage tint texture textureMode textureWrap ' +
+ 'blend copy filter get loadPixels set updatePixels blendMode loadShader PShaderresetShader shader createFont ' +
+ 'loadFont text textFont textAlign textLeading textMode textSize textWidth textAscent textDescent abs ceil ' +
+ 'constrain dist exp floor lerp log mag map max min norm pow round sq sqrt acos asin atan atan2 cos degrees ' +
+ 'radians sin tan noise noiseDetail noiseSeed random randomGaussian randomSeed'
+ },
+ contains: [
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.C_NUMBER_MODE
+ ]
+ };
+});
+
+hljs.registerLanguage("profile",
+/*
+Language: Python profile
+Description: Python profiler results
+Author: Brian Beck <exogen@gmail.com>
+*/
+
+function(hljs) {
+ return {
+ contains: [
+ hljs.C_NUMBER_MODE,
+ {
+ begin: '[a-zA-Z_][\\da-zA-Z_]+\\.[\\da-zA-Z_]{1,3}', end: ':',
+ excludeEnd: true
+ },
+ {
+ begin: '(ncalls|tottime|cumtime)', end: '$',
+ keywords: 'ncalls tottime|10 cumtime|10 filename',
+ relevance: 10
+ },
+ {
+ begin: 'function calls', end: '$',
+ contains: [hljs.C_NUMBER_MODE],
+ relevance: 10
+ },
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ {
+ className: 'string',
+ begin: '\\(', end: '\\)$',
+ excludeBegin: true, excludeEnd: true,
+ relevance: 0
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("prolog",
+/*
+Language: Prolog
+Description: Prolog is a general purpose logic programming language associated with artificial intelligence and computational linguistics.
+Author: Raivo Laanemets <raivo@infdot.com>
+*/
+
+function(hljs) {
+
+ var ATOM = {
+
+ begin: /[a-z][A-Za-z0-9_]*/,
+ relevance: 0
+ };
+
+ var VAR = {
+
+ className: 'symbol',
+ variants: [
+ {begin: /[A-Z][a-zA-Z0-9_]*/},
+ {begin: /_[A-Za-z0-9_]*/},
+ ],
+ relevance: 0
+ };
+
+ var PARENTED = {
+
+ begin: /\(/,
+ end: /\)/,
+ relevance: 0
+ };
+
+ var LIST = {
+
+ begin: /\[/,
+ end: /\]/
+ };
+
+ var LINE_COMMENT = {
+
+ className: 'comment',
+ begin: /%/, end: /$/,
+ contains: [hljs.PHRASAL_WORDS_MODE]
+ };
+
+ var BACKTICK_STRING = {
+
+ className: 'string',
+ begin: /`/, end: /`/,
+ contains: [hljs.BACKSLASH_ESCAPE]
+ };
+
+ var CHAR_CODE = {
+
+ className: 'string', // 0'a etc.
+ begin: /0\'(\\\'|.)/
+ };
+
+ var SPACE_CODE = {
+
+ className: 'string',
+ begin: /0\'\\s/ // 0'\s
+ };
+
+ var PRED_OP = { // relevance booster
+ begin: /:-/
+ };
+
+ var inner = [
+
+ ATOM,
+ VAR,
+ PARENTED,
+ PRED_OP,
+ LIST,
+ LINE_COMMENT,
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.APOS_STRING_MODE,
+ BACKTICK_STRING,
+ CHAR_CODE,
+ SPACE_CODE,
+ hljs.C_NUMBER_MODE
+ ];
+
+ PARENTED.contains = inner;
+ LIST.contains = inner;
+
+ return {
+ contains: inner.concat([
+ {begin: /\.$/} // relevance booster
+ ])
+ };
+});
+
+hljs.registerLanguage("protobuf",
+/*
+Language: Protocol Buffers
+Author: Dan Tao <daniel.tao@gmail.com>
+Description: Protocol buffer message definition format
+Category: protocols
+*/
+
+function(hljs) {
+ return {
+ keywords: {
+ keyword: 'package import option optional required repeated group',
+ built_in: 'double float int32 int64 uint32 uint64 sint32 sint64 ' +
+ 'fixed32 fixed64 sfixed32 sfixed64 bool string bytes',
+ literal: 'true false'
+ },
+ contains: [
+ hljs.QUOTE_STRING_MODE,
+ hljs.NUMBER_MODE,
+ hljs.C_LINE_COMMENT_MODE,
+ {
+ className: 'class',
+ beginKeywords: 'message enum service', end: /\{/,
+ illegal: /\n/,
+ contains: [
+ hljs.inherit(hljs.TITLE_MODE, {
+ starts: {endsWithParent: true, excludeEnd: true} // hack: eating everything after the first title
+ })
+ ]
+ },
+ {
+ className: 'function',
+ beginKeywords: 'rpc',
+ end: /;/, excludeEnd: true,
+ keywords: 'rpc returns'
+ },
+ {
+ begin: /^\s*[A-Z_]+/,
+ end: /\s*=/, excludeEnd: true
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("puppet",
+/*
+Language: Puppet
+Author: Jose Molina Colmenero <gaudy41@gmail.com>
+Category: config
+*/
+
+function(hljs) {
+
+ var PUPPET_KEYWORDS = {
+ keyword:
+ /* language keywords */
+ 'and case default else elsif false if in import enherits node or true undef unless main settings $string ',
+ literal:
+ /* metaparameters */
+ 'alias audit before loglevel noop require subscribe tag ' +
+ /* normal attributes */
+ 'owner ensure group mode name|0 changes context force incl lens load_path onlyif provider returns root show_diff type_check ' +
+ 'en_address ip_address realname command environment hour monute month monthday special target weekday '+
+ 'creates cwd ogoutput refresh refreshonly tries try_sleep umask backup checksum content ctime force ignore ' +
+ 'links mtime purge recurse recurselimit replace selinux_ignore_defaults selrange selrole seltype seluser source ' +
+ 'souirce_permissions sourceselect validate_cmd validate_replacement allowdupe attribute_membership auth_membership forcelocal gid '+
+ 'ia_load_module members system host_aliases ip allowed_trunk_vlans description device_url duplex encapsulation etherchannel ' +
+ 'native_vlan speed principals allow_root auth_class auth_type authenticate_user k_of_n mechanisms rule session_owner shared options ' +
+ 'device fstype enable hasrestart directory present absent link atboot blockdevice device dump pass remounts poller_tag use ' +
+ 'message withpath adminfile allow_virtual allowcdrom category configfiles flavor install_options instance package_settings platform ' +
+ 'responsefile status uninstall_options vendor unless_system_user unless_uid binary control flags hasstatus manifest pattern restart running ' +
+ 'start stop allowdupe auths expiry gid groups home iterations key_membership keys managehome membership password password_max_age ' +
+ 'password_min_age profile_membership profiles project purge_ssh_keys role_membership roles salt shell uid baseurl cost descr enabled ' +
+ 'enablegroups exclude failovermethod gpgcheck gpgkey http_caching include includepkgs keepalive metadata_expire metalink mirrorlist ' +
+ 'priority protect proxy proxy_password proxy_username repo_gpgcheck s3_enabled skip_if_unavailable sslcacert sslclientcert sslclientkey ' +
+ 'sslverify mounted',
+ built_in:
+ /* core facts */
+ 'architecture augeasversion blockdevices boardmanufacturer boardproductname boardserialnumber cfkey dhcp_servers ' +
+ 'domain ec2_ ec2_userdata facterversion filesystems ldom fqdn gid hardwareisa hardwaremodel hostname id|0 interfaces '+
+ 'ipaddress ipaddress_ ipaddress6 ipaddress6_ iphostnumber is_virtual kernel kernelmajversion kernelrelease kernelversion ' +
+ 'kernelrelease kernelversion lsbdistcodename lsbdistdescription lsbdistid lsbdistrelease lsbmajdistrelease lsbminordistrelease ' +
+ 'lsbrelease macaddress macaddress_ macosx_buildversion macosx_productname macosx_productversion macosx_productverson_major ' +
+ 'macosx_productversion_minor manufacturer memoryfree memorysize netmask metmask_ network_ operatingsystem operatingsystemmajrelease '+
+ 'operatingsystemrelease osfamily partitions path physicalprocessorcount processor processorcount productname ps puppetversion '+
+ 'rubysitedir rubyversion selinux selinux_config_mode selinux_config_policy selinux_current_mode selinux_current_mode selinux_enforced '+
+ 'selinux_policyversion serialnumber sp_ sshdsakey sshecdsakey sshrsakey swapencrypted swapfree swapsize timezone type uniqueid uptime '+
+ 'uptime_days uptime_hours uptime_seconds uuid virtual vlans xendomains zfs_version zonenae zones zpool_version'
+ };
+
+ var COMMENT = hljs.COMMENT('#', '$');
+
+ var IDENT_RE = '([A-Za-z_]|::)(\\w|::)*';
+
+ var TITLE = hljs.inherit(hljs.TITLE_MODE, {begin: IDENT_RE});
+
+ var VARIABLE = {className: 'variable', begin: '\\$' + IDENT_RE};
+
+ var STRING = {
+ className: 'string',
+ contains: [hljs.BACKSLASH_ESCAPE, VARIABLE],
+ variants: [
+ {begin: /'/, end: /'/},
+ {begin: /"/, end: /"/}
+ ]
+ };
+
+ return {
+ aliases: ['pp'],
+ contains: [
+ COMMENT,
+ VARIABLE,
+ STRING,
+ {
+ beginKeywords: 'class', end: '\\{|;',
+ illegal: /=/,
+ contains: [TITLE, COMMENT]
+ },
+ {
+ beginKeywords: 'define', end: /\{/,
+ contains: [
+ {
+ className: 'section', begin: hljs.IDENT_RE, endsParent: true
+ }
+ ]
+ },
+ {
+ begin: hljs.IDENT_RE + '\\s+\\{', returnBegin: true,
+ end: /\S/,
+ contains: [
+ {
+ className: 'keyword',
+ begin: hljs.IDENT_RE
+ },
+ {
+ begin: /\{/, end: /\}/,
+ keywords: PUPPET_KEYWORDS,
+ relevance: 0,
+ contains: [
+ STRING,
+ COMMENT,
+ {
+ begin:'[a-zA-Z_]+\\s*=>',
+ returnBegin: true, end: '=>',
+ contains: [
+ {
+ className: 'attr',
+ begin: hljs.IDENT_RE,
+ }
+ ]
+ },
+ {
+ className: 'number',
+ begin: '(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b',
+ relevance: 0
+ },
+ VARIABLE
+ ]
+ }
+ ],
+ relevance: 0
+ }
+ ]
+ }
+});
+
+hljs.registerLanguage("purebasic",
+/*
+Language: PureBASIC
+Author: Tristano Ajmone <tajmone@gmail.com>
+Description: Syntax highlighting for PureBASIC (v.5). No inline ASM highlighting. First release (v.1.0), April 2016.
+Credits: I've taken inspiration from the PureBasic language file for GeSHi, created by Gustavo Julio Fiorenza (GuShH).
+*/
+
+// Base deafult colors in PB IDE: background: #FFFFDF; foreground: #000000;
+
+function(hljs) {
+ var STRINGS = { // PB IDE color: #0080FF (Azure Radiance)
+ className: 'string',
+ begin: '(~)?"', end: '"',
+ illegal: '\\n'
+ };
+ var CONSTANTS = { // PB IDE color: #924B72 (Cannon Pink)
+ // "#" + a letter or underscore + letters, digits or underscores + (optional) "$"
+ className: 'symbol',
+ begin: '#[a-zA-Z_]\\w*\\$?'
+ };
+
+ return {
+ aliases: ['pb', 'pbi'],
+ keywords: // PB IDE color: #006666 (Blue Stone) + Bold
+ // The following keywords list was taken and adapted from GuShH's PureBasic language file for GeSHi...
+ 'And As Break CallDebugger Case CompilerCase CompilerDefault CompilerElse CompilerEndIf CompilerEndSelect ' +
+ 'CompilerError CompilerIf CompilerSelect Continue Data DataSection EndDataSection Debug DebugLevel ' +
+ 'Default Define Dim DisableASM DisableDebugger DisableExplicit Else ElseIf EnableASM ' +
+ 'EnableDebugger EnableExplicit End EndEnumeration EndIf EndImport EndInterface EndMacro EndProcedure ' +
+ 'EndSelect EndStructure EndStructureUnion EndWith Enumeration Extends FakeReturn For Next ForEach ' +
+ 'ForEver Global Gosub Goto If Import ImportC IncludeBinary IncludeFile IncludePath Interface Macro ' +
+ 'NewList Not Or ProcedureReturn Protected Prototype ' +
+ 'PrototypeC Read ReDim Repeat Until Restore Return Select Shared Static Step Structure StructureUnion ' +
+ 'Swap To Wend While With XIncludeFile XOr ' +
+ 'Procedure ProcedureC ProcedureCDLL ProcedureDLL Declare DeclareC DeclareCDLL DeclareDLL',
+ contains: [
+ // COMMENTS | PB IDE color: #00AAAA (Persian Green)
+ hljs.COMMENT(';', '$', {relevance: 0}),
+
+ { // PROCEDURES DEFINITIONS
+ className: 'function',
+ begin: '\\b(Procedure|Declare)(C|CDLL|DLL)?\\b',
+ end: '\\(',
+ excludeEnd: true,
+ returnBegin: true,
+ contains: [
+ { // PROCEDURE KEYWORDS | PB IDE color: #006666 (Blue Stone) + Bold
+ className: 'keyword',
+ begin: '(Procedure|Declare)(C|CDLL|DLL)?',
+ excludeEnd: true
+ },
+ { // PROCEDURE RETURN TYPE SETTING | PB IDE color: #000000 (Black)
+ className: 'type',
+ begin: '\\.\\w*'
+ // end: ' ',
+ },
+ hljs.UNDERSCORE_TITLE_MODE // PROCEDURE NAME | PB IDE color: #006666 (Blue Stone)
+ ]
+ },
+ STRINGS,
+ CONSTANTS
+ ]
+ };
+});
+
+hljs.registerLanguage("python",
+/*
+Language: Python
+Category: common
+*/
+
+function(hljs) {
+ var PROMPT = {
+ className: 'meta', begin: /^(>>>|\.\.\.) /
+ };
+ var STRING = {
+ className: 'string',
+ contains: [hljs.BACKSLASH_ESCAPE],
+ variants: [
+ {
+ begin: /(u|b)?r?'''/, end: /'''/,
+ contains: [PROMPT],
+ relevance: 10
+ },
+ {
+ begin: /(u|b)?r?"""/, end: /"""/,
+ contains: [PROMPT],
+ relevance: 10
+ },
+ {
+ begin: /(u|r|ur)'/, end: /'/,
+ relevance: 10
+ },
+ {
+ begin: /(u|r|ur)"/, end: /"/,
+ relevance: 10
+ },
+ {
+ begin: /(b|br)'/, end: /'/
+ },
+ {
+ begin: /(b|br)"/, end: /"/
+ },
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE
+ ]
+ };
+ var NUMBER = {
+ className: 'number', relevance: 0,
+ variants: [
+ {begin: hljs.BINARY_NUMBER_RE + '[lLjJ]?'},
+ {begin: '\\b(0o[0-7]+)[lLjJ]?'},
+ {begin: hljs.C_NUMBER_RE + '[lLjJ]?'}
+ ]
+ };
+ var PARAMS = {
+ className: 'params',
+ begin: /\(/, end: /\)/,
+ contains: ['self', PROMPT, NUMBER, STRING]
+ };
+ return {
+ aliases: ['py', 'gyp'],
+ keywords: {
+ keyword:
+ 'and elif is global as in if from raise for except finally print import pass return ' +
+ 'exec else break not with class assert yield try while continue del or def lambda ' +
+ 'async await nonlocal|10 None True False',
+ built_in:
+ 'Ellipsis NotImplemented'
+ },
+ illegal: /(<\/|->|\?)/,
+ contains: [
+ PROMPT,
+ NUMBER,
+ STRING,
+ hljs.HASH_COMMENT_MODE,
+ {
+ variants: [
+ {className: 'function', beginKeywords: 'def', relevance: 10},
+ {className: 'class', beginKeywords: 'class'}
+ ],
+ end: /:/,
+ illegal: /[${=;\n,]/,
+ contains: [
+ hljs.UNDERSCORE_TITLE_MODE,
+ PARAMS,
+ {
+ begin: /->/, endsWithParent: true,
+ keywords: 'None'
+ }
+ ]
+ },
+ {
+ className: 'meta',
+ begin: /^[\t ]*@/, end: /$/
+ },
+ {
+ begin: /\b(print|exec)\(/ // don’t highlight keywords-turned-functions in Python 3
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("q",
+/*
+Language: Q
+Author: Sergey Vidyuk <svidyuk@gmail.com>
+Description: K/Q/Kdb+ from Kx Systems
+*/
+function(hljs) {
+ var Q_KEYWORDS = {
+ keyword:
+ 'do while select delete by update from',
+ literal:
+ '0b 1b',
+ built_in:
+ 'neg not null string reciprocal floor ceiling signum mod xbar xlog and or each scan over prior mmu lsq inv md5 ltime gtime count first var dev med cov cor all any rand sums prds mins maxs fills deltas ratios avgs differ prev next rank reverse iasc idesc asc desc msum mcount mavg mdev xrank mmin mmax xprev rotate distinct group where flip type key til get value attr cut set upsert raze union inter except cross sv vs sublist enlist read0 read1 hopen hclose hdel hsym hcount peach system ltrim rtrim trim lower upper ssr view tables views cols xcols keys xkey xcol xasc xdesc fkeys meta lj aj aj0 ij pj asof uj ww wj wj1 fby xgroup ungroup ej save load rsave rload show csv parse eval min max avg wavg wsum sin cos tan sum',
+ type:
+ '`float `double int `timestamp `timespan `datetime `time `boolean `symbol `char `byte `short `long `real `month `date `minute `second `guid'
+ };
+ return {
+ aliases:['k', 'kdb'],
+ keywords: Q_KEYWORDS,
+ lexemes: /(`?)[A-Za-z0-9_]+\b/,
+ contains: [
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.C_NUMBER_MODE
+ ]
+ };
+});
+
+hljs.registerLanguage("qml",
+/*
+Language: QML
+Requires: javascript.js, xml.js
+Author: John Foster <jfoster@esri.com>
+Description: Syntax highlighting for the Qt Quick QML scripting language, based mostly off
+ the JavaScript parser.
+Category: scripting
+*/
+
+function(hljs) {
+ var KEYWORDS = {
+ keyword:
+ 'in of on if for while finally var new function do return void else break catch ' +
+ 'instanceof with throw case default try this switch continue typeof delete ' +
+ 'let yield const export super debugger as async await import',
+ literal:
+ 'true false null undefined NaN Infinity',
+ built_in:
+ 'eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent ' +
+ 'encodeURI encodeURIComponent escape unescape Object Function Boolean Error ' +
+ 'EvalError InternalError RangeError ReferenceError StopIteration SyntaxError ' +
+ 'TypeError URIError Number Math Date String RegExp Array Float32Array ' +
+ 'Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array ' +
+ 'Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require ' +
+ 'module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect ' +
+ 'Behavior bool color coordinate date double enumeration font geocircle georectangle ' +
+ 'geoshape int list matrix4x4 parent point quaternion real rect ' +
+ 'size string url var variant vector2d vector3d vector4d' +
+ 'Promise'
+ };
+
+ var QML_IDENT_RE = '[a-zA-Z_][a-zA-Z0-9\\._]*';
+
+ // Isolate property statements. Ends at a :, =, ;, ,, a comment or end of line.
+ // Use property class.
+ var PROPERTY = {
+ className: 'keyword',
+ begin: '\\bproperty\\b',
+ starts: {
+ className: 'string',
+ end: '(:|=|;|,|//|/\\*|$)',
+ returnEnd: true
+ }
+ };
+
+ // Isolate signal statements. Ends at a ) a comment or end of line.
+ // Use property class.
+ var SIGNAL = {
+ className: 'keyword',
+ begin: '\\bsignal\\b',
+ starts: {
+ className: 'string',
+ end: '(\\(|:|=|;|,|//|/\\*|$)',
+ returnEnd: true
+ }
+ };
+
+ // id: is special in QML. When we see id: we want to mark the id: as attribute and
+ // emphasize the token following.
+ var ID_ID = {
+ className: 'attribute',
+ begin: '\\bid\\s*:',
+ starts: {
+ className: 'string',
+ end: QML_IDENT_RE,
+ returnEnd: false
+ }
+ };
+
+ // Find QML object attribute. An attribute is a QML identifier followed by :.
+ // Unfortunately it's hard to know where it ends, as it may contain scalars,
+ // objects, object definitions, or javascript. The true end is either when the parent
+ // ends or the next attribute is detected.
+ var QML_ATTRIBUTE = {
+ begin: QML_IDENT_RE + '\\s*:',
+ returnBegin: true,
+ contains: [
+ {
+ className: 'attribute',
+ begin: QML_IDENT_RE,
+ end: '\\s*:',
+ excludeEnd: true,
+ relevance: 0
+ }
+ ],
+ relevance: 0
+ };
+
+ // Find QML object. A QML object is a QML identifier followed by { and ends at the matching }.
+ // All we really care about is finding IDENT followed by { and just mark up the IDENT and ignore the {.
+ var QML_OBJECT = {
+ begin: QML_IDENT_RE + '\\s*{', end: '{',
+ returnBegin: true,
+ relevance: 0,
+ contains: [
+ hljs.inherit(hljs.TITLE_MODE, {begin: QML_IDENT_RE})
+ ]
+ };
+
+ return {
+ aliases: ['qt'],
+ case_insensitive: false,
+ keywords: KEYWORDS,
+ contains: [
+ {
+ className: 'meta',
+ begin: /^\s*['"]use (strict|asm)['"]/
+ },
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ { // template string
+ className: 'string',
+ begin: '`', end: '`',
+ contains: [
+ hljs.BACKSLASH_ESCAPE,
+ {
+ className: 'subst',
+ begin: '\\$\\{', end: '\\}'
+ }
+ ]
+ },
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ {
+ className: 'number',
+ variants: [
+ { begin: '\\b(0[bB][01]+)' },
+ { begin: '\\b(0[oO][0-7]+)' },
+ { begin: hljs.C_NUMBER_RE }
+ ],
+ relevance: 0
+ },
+ { // "value" container
+ begin: '(' + hljs.RE_STARTERS_RE + '|\\b(case|return|throw)\\b)\\s*',
+ keywords: 'return throw case',
+ contains: [
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.REGEXP_MODE,
+ { // E4X / JSX
+ begin: /</, end: />\s*[);\]]/,
+ relevance: 0,
+ subLanguage: 'xml'
+ }
+ ],
+ relevance: 0
+ },
+ SIGNAL,
+ PROPERTY,
+ {
+ className: 'function',
+ beginKeywords: 'function', end: /\{/, excludeEnd: true,
+ contains: [
+ hljs.inherit(hljs.TITLE_MODE, {begin: /[A-Za-z$_][0-9A-Za-z$_]*/}),
+ {
+ className: 'params',
+ begin: /\(/, end: /\)/,
+ excludeBegin: true,
+ excludeEnd: true,
+ contains: [
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE
+ ]
+ }
+ ],
+ illegal: /\[|%/
+ },
+ {
+ begin: '\\.' + hljs.IDENT_RE, relevance: 0 // hack: prevents detection of keywords after dots
+ },
+ ID_ID,
+ QML_ATTRIBUTE,
+ QML_OBJECT
+ ],
+ illegal: /#/
+ };
+});
+
+hljs.registerLanguage("r",
+/*
+Language: R
+Author: Joe Cheng <joe@rstudio.org>
+Category: scientific
+*/
+
+function(hljs) {
+ var IDENT_RE = '([a-zA-Z]|\\.[a-zA-Z.])[a-zA-Z0-9._]*';
+
+ return {
+ contains: [
+ hljs.HASH_COMMENT_MODE,
+ {
+ begin: IDENT_RE,
+ lexemes: IDENT_RE,
+ keywords: {
+ keyword:
+ 'function if in break next repeat else for return switch while try tryCatch ' +
+ 'stop warning require library attach detach source setMethod setGeneric ' +
+ 'setGroupGeneric setClass ...',
+ literal:
+ 'NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 ' +
+ 'NA_complex_|10'
+ },
+ relevance: 0
+ },
+ {
+ // hex value
+ className: 'number',
+ begin: "0[xX][0-9a-fA-F]+[Li]?\\b",
+ relevance: 0
+ },
+ {
+ // explicit integer
+ className: 'number',
+ begin: "\\d+(?:[eE][+\\-]?\\d*)?L\\b",
+ relevance: 0
+ },
+ {
+ // number with trailing decimal
+ className: 'number',
+ begin: "\\d+\\.(?!\\d)(?:i\\b)?",
+ relevance: 0
+ },
+ {
+ // number
+ className: 'number',
+ begin: "\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",
+ relevance: 0
+ },
+ {
+ // number with leading decimal
+ className: 'number',
+ begin: "\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",
+ relevance: 0
+ },
+
+ {
+ // escaped identifier
+ begin: '`',
+ end: '`',
+ relevance: 0
+ },
+
+ {
+ className: 'string',
+ contains: [hljs.BACKSLASH_ESCAPE],
+ variants: [
+ {begin: '"', end: '"'},
+ {begin: "'", end: "'"}
+ ]
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("rib",
+/*
+Language: RenderMan RIB
+Author: Konstantin Evdokimenko <qewerty@gmail.com>
+Contributors: Shuen-Huei Guan <drake.guan@gmail.com>
+Category: graphics
+*/
+
+function(hljs) {
+ return {
+ keywords:
+ 'ArchiveRecord AreaLightSource Atmosphere Attribute AttributeBegin AttributeEnd Basis ' +
+ 'Begin Blobby Bound Clipping ClippingPlane Color ColorSamples ConcatTransform Cone ' +
+ 'CoordinateSystem CoordSysTransform CropWindow Curves Cylinder DepthOfField Detail ' +
+ 'DetailRange Disk Displacement Display End ErrorHandler Exposure Exterior Format ' +
+ 'FrameAspectRatio FrameBegin FrameEnd GeneralPolygon GeometricApproximation Geometry ' +
+ 'Hider Hyperboloid Identity Illuminate Imager Interior LightSource ' +
+ 'MakeCubeFaceEnvironment MakeLatLongEnvironment MakeShadow MakeTexture Matte ' +
+ 'MotionBegin MotionEnd NuPatch ObjectBegin ObjectEnd ObjectInstance Opacity Option ' +
+ 'Orientation Paraboloid Patch PatchMesh Perspective PixelFilter PixelSamples ' +
+ 'PixelVariance Points PointsGeneralPolygons PointsPolygons Polygon Procedural Projection ' +
+ 'Quantize ReadArchive RelativeDetail ReverseOrientation Rotate Scale ScreenWindow ' +
+ 'ShadingInterpolation ShadingRate Shutter Sides Skew SolidBegin SolidEnd Sphere ' +
+ 'SubdivisionMesh Surface TextureCoordinates Torus Transform TransformBegin TransformEnd ' +
+ 'TransformPoints Translate TrimCurve WorldBegin WorldEnd',
+ illegal: '</',
+ contains: [
+ hljs.HASH_COMMENT_MODE,
+ hljs.C_NUMBER_MODE,
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE
+ ]
+ };
+});
+
+hljs.registerLanguage("roboconf",
+/*
+Language: Roboconf
+Author: Vincent Zurczak <vzurczak@linagora.com>
+Website: http://roboconf.net
+Description: Syntax highlighting for Roboconf's DSL
+Category: config
+*/
+
+function(hljs) {
+ var IDENTIFIER = '[a-zA-Z-_][^\\n{]+\\{';
+
+ var PROPERTY = {
+ className: 'attribute',
+ begin: /[a-zA-Z-_]+/, end: /\s*:/, excludeEnd: true,
+ starts: {
+ end: ';',
+ relevance: 0,
+ contains: [
+ {
+ className: 'variable',
+ begin: /\.[a-zA-Z-_]+/
+ },
+ {
+ className: 'keyword',
+ begin: /\(optional\)/
+ }
+ ]
+ }
+ };
+
+ return {
+ aliases: ['graph', 'instances'],
+ case_insensitive: true,
+ keywords: 'import',
+ contains: [
+ // Facet sections
+ {
+ begin: '^facet ' + IDENTIFIER,
+ end: '}',
+ keywords: 'facet',
+ contains: [
+ PROPERTY,
+ hljs.HASH_COMMENT_MODE
+ ]
+ },
+
+ // Instance sections
+ {
+ begin: '^\\s*instance of ' + IDENTIFIER,
+ end: '}',
+ keywords: 'name count channels instance-data instance-state instance of',
+ illegal: /\S/,
+ contains: [
+ 'self',
+ PROPERTY,
+ hljs.HASH_COMMENT_MODE
+ ]
+ },
+
+ // Component sections
+ {
+ begin: '^' + IDENTIFIER,
+ end: '}',
+ contains: [
+ PROPERTY,
+ hljs.HASH_COMMENT_MODE
+ ]
+ },
+
+ // Comments
+ hljs.HASH_COMMENT_MODE
+ ]
+ };
+});
+
+hljs.registerLanguage("rsl",
+/*
+Language: RenderMan RSL
+Author: Konstantin Evdokimenko <qewerty@gmail.com>
+Contributors: Shuen-Huei Guan <drake.guan@gmail.com>
+Category: graphics
+*/
+
+function(hljs) {
+ return {
+ keywords: {
+ keyword:
+ 'float color point normal vector matrix while for if do return else break extern continue',
+ built_in:
+ 'abs acos ambient area asin atan atmosphere attribute calculatenormal ceil cellnoise ' +
+ 'clamp comp concat cos degrees depth Deriv diffuse distance Du Dv environment exp ' +
+ 'faceforward filterstep floor format fresnel incident length lightsource log match ' +
+ 'max min mod noise normalize ntransform opposite option phong pnoise pow printf ' +
+ 'ptlined radians random reflect refract renderinfo round setcomp setxcomp setycomp ' +
+ 'setzcomp shadow sign sin smoothstep specular specularbrdf spline sqrt step tan ' +
+ 'texture textureinfo trace transform vtransform xcomp ycomp zcomp'
+ },
+ illegal: '</',
+ contains: [
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.APOS_STRING_MODE,
+ hljs.C_NUMBER_MODE,
+ {
+ className: 'meta',
+ begin: '#', end: '$'
+ },
+ {
+ className: 'class',
+ beginKeywords: 'surface displacement light volume imager', end: '\\('
+ },
+ {
+ beginKeywords: 'illuminate illuminance gather', end: '\\('
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("ruleslanguage",
+/*
+Language: Oracle Rules Language
+Author: Jason Jacobson <jason.a.jacobson@gmail.com>
+Description: The Oracle Utilities Rules Language is used to program the Oracle Utilities Applications acquired from LODESTAR Corporation. The products include Billing Component, LPSS, Pricing Component etc. through version 1.6.1.
+Category: enterprise
+*/
+
+function(hljs) {
+ return {
+ keywords: {
+ keyword: 'BILL_PERIOD BILL_START BILL_STOP RS_EFFECTIVE_START RS_EFFECTIVE_STOP RS_JURIS_CODE RS_OPCO_CODE ' +
+ 'INTDADDATTRIBUTE|5 INTDADDVMSG|5 INTDBLOCKOP|5 INTDBLOCKOPNA|5 INTDCLOSE|5 INTDCOUNT|5 ' +
+ 'INTDCOUNTSTATUSCODE|5 INTDCREATEMASK|5 INTDCREATEDAYMASK|5 INTDCREATEFACTORMASK|5 ' +
+ 'INTDCREATEHANDLE|5 INTDCREATEOVERRIDEDAYMASK|5 INTDCREATEOVERRIDEMASK|5 ' +
+ 'INTDCREATESTATUSCODEMASK|5 INTDCREATETOUPERIOD|5 INTDDELETE|5 INTDDIPTEST|5 INTDEXPORT|5 ' +
+ 'INTDGETERRORCODE|5 INTDGETERRORMESSAGE|5 INTDISEQUAL|5 INTDJOIN|5 INTDLOAD|5 INTDLOADACTUALCUT|5 ' +
+ 'INTDLOADDATES|5 INTDLOADHIST|5 INTDLOADLIST|5 INTDLOADLISTDATES|5 INTDLOADLISTENERGY|5 ' +
+ 'INTDLOADLISTHIST|5 INTDLOADRELATEDCHANNEL|5 INTDLOADSP|5 INTDLOADSTAGING|5 INTDLOADUOM|5 ' +
+ 'INTDLOADUOMDATES|5 INTDLOADUOMHIST|5 INTDLOADVERSION|5 INTDOPEN|5 INTDREADFIRST|5 INTDREADNEXT|5 ' +
+ 'INTDRECCOUNT|5 INTDRELEASE|5 INTDREPLACE|5 INTDROLLAVG|5 INTDROLLPEAK|5 INTDSCALAROP|5 INTDSCALE|5 ' +
+ 'INTDSETATTRIBUTE|5 INTDSETDSTPARTICIPANT|5 INTDSETSTRING|5 INTDSETVALUE|5 INTDSETVALUESTATUS|5 ' +
+ 'INTDSHIFTSTARTTIME|5 INTDSMOOTH|5 INTDSORT|5 INTDSPIKETEST|5 INTDSUBSET|5 INTDTOU|5 ' +
+ 'INTDTOURELEASE|5 INTDTOUVALUE|5 INTDUPDATESTATS|5 INTDVALUE|5 STDEV INTDDELETEEX|5 ' +
+ 'INTDLOADEXACTUAL|5 INTDLOADEXCUT|5 INTDLOADEXDATES|5 INTDLOADEX|5 INTDLOADEXRELATEDCHANNEL|5 ' +
+ 'INTDSAVEEX|5 MVLOAD|5 MVLOADACCT|5 MVLOADACCTDATES|5 MVLOADACCTHIST|5 MVLOADDATES|5 MVLOADHIST|5 ' +
+ 'MVLOADLIST|5 MVLOADLISTDATES|5 MVLOADLISTHIST|5 IF FOR NEXT DONE SELECT END CALL ABORT CLEAR CHANNEL FACTOR LIST NUMBER ' +
+ 'OVERRIDE SET WEEK DISTRIBUTIONNODE ELSE WHEN THEN OTHERWISE IENUM CSV INCLUDE LEAVE RIDER SAVE DELETE ' +
+ 'NOVALUE SECTION WARN SAVE_UPDATE DETERMINANT LABEL REPORT REVENUE EACH ' +
+ 'IN FROM TOTAL CHARGE BLOCK AND OR CSV_FILE RATE_CODE AUXILIARY_DEMAND ' +
+ 'UIDACCOUNT RS BILL_PERIOD_SELECT HOURS_PER_MONTH INTD_ERROR_STOP SEASON_SCHEDULE_NAME ' +
+ 'ACCOUNTFACTOR ARRAYUPPERBOUND CALLSTOREDPROC GETADOCONNECTION GETCONNECT GETDATASOURCE ' +
+ 'GETQUALIFIER GETUSERID HASVALUE LISTCOUNT LISTOP LISTUPDATE LISTVALUE PRORATEFACTOR RSPRORATE ' +
+ 'SETBINPATH SETDBMONITOR WQ_OPEN BILLINGHOURS DATE DATEFROMFLOAT DATETIMEFROMSTRING ' +
+ 'DATETIMETOSTRING DATETOFLOAT DAY DAYDIFF DAYNAME DBDATETIME HOUR MINUTE MONTH MONTHDIFF ' +
+ 'MONTHHOURS MONTHNAME ROUNDDATE SAMEWEEKDAYLASTYEAR SECOND WEEKDAY WEEKDIFF YEAR YEARDAY ' +
+ 'YEARSTR COMPSUM HISTCOUNT HISTMAX HISTMIN HISTMINNZ HISTVALUE MAXNRANGE MAXRANGE MINRANGE ' +
+ 'COMPIKVA COMPKVA COMPKVARFROMKQKW COMPLF IDATTR FLAG LF2KW LF2KWH MAXKW POWERFACTOR ' +
+ 'READING2USAGE AVGSEASON MAXSEASON MONTHLYMERGE SEASONVALUE SUMSEASON ACCTREADDATES ' +
+ 'ACCTTABLELOAD CONFIGADD CONFIGGET CREATEOBJECT CREATEREPORT EMAILCLIENT EXPBLKMDMUSAGE ' +
+ 'EXPMDMUSAGE EXPORT_USAGE FACTORINEFFECT GETUSERSPECIFIEDSTOP INEFFECT ISHOLIDAY RUNRATE ' +
+ 'SAVE_PROFILE SETREPORTTITLE USEREXIT WATFORRUNRATE TO TABLE ACOS ASIN ATAN ATAN2 BITAND CEIL ' +
+ 'COS COSECANT COSH COTANGENT DIVQUOT DIVREM EXP FABS FLOOR FMOD FREPM FREXPN LOG LOG10 MAX MAXN ' +
+ 'MIN MINNZ MODF POW ROUND ROUND2VALUE ROUNDINT SECANT SIN SINH SQROOT TAN TANH FLOAT2STRING ' +
+ 'FLOAT2STRINGNC INSTR LEFT LEN LTRIM MID RIGHT RTRIM STRING STRINGNC TOLOWER TOUPPER TRIM ' +
+ 'NUMDAYS READ_DATE STAGING',
+ built_in: 'IDENTIFIER OPTIONS XML_ELEMENT XML_OP XML_ELEMENT_OF DOMDOCCREATE DOMDOCLOADFILE DOMDOCLOADXML ' +
+ 'DOMDOCSAVEFILE DOMDOCGETROOT DOMDOCADDPI DOMNODEGETNAME DOMNODEGETTYPE DOMNODEGETVALUE DOMNODEGETCHILDCT ' +
+ 'DOMNODEGETFIRSTCHILD DOMNODEGETSIBLING DOMNODECREATECHILDELEMENT DOMNODESETATTRIBUTE ' +
+ 'DOMNODEGETCHILDELEMENTCT DOMNODEGETFIRSTCHILDELEMENT DOMNODEGETSIBLINGELEMENT DOMNODEGETATTRIBUTECT ' +
+ 'DOMNODEGETATTRIBUTEI DOMNODEGETATTRIBUTEBYNAME DOMNODEGETBYNAME'
+ },
+ contains: [
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.C_NUMBER_MODE,
+ {
+ className: 'literal',
+ variants: [
+ {begin: '#\\s+[a-zA-Z\\ \\.]*', relevance: 0}, // looks like #-comment
+ {begin: '#[a-zA-Z\\ \\.]+'}
+ ]
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("rust",
+/*
+Language: Rust
+Author: Andrey Vlasovskikh <andrey.vlasovskikh@gmail.com>
+Contributors: Roman Shmatov <romanshmatov@gmail.com>
+Category: system
+*/
+
+function(hljs) {
+ var NUM_SUFFIX = '([uif](8|16|32|64|size))\?';
+ var BLOCK_COMMENT = hljs.inherit(hljs.C_BLOCK_COMMENT_MODE);
+ BLOCK_COMMENT.contains.push('self');
+ var KEYWORDS =
+ 'alignof as be box break const continue crate do else enum extern ' +
+ 'false fn for if impl in let loop match mod mut offsetof once priv ' +
+ 'proc pub pure ref return self Self sizeof static struct super trait true ' +
+ 'type typeof unsafe unsized use virtual while where yield move default ' +
+ 'int i8 i16 i32 i64 isize ' +
+ 'uint u8 u32 u64 usize ' +
+ 'float f32 f64 ' +
+ 'str char bool'
+ var BUILTINS =
+ // prelude
+ 'Copy Send Sized Sync Drop Fn FnMut FnOnce drop Box ToOwned Clone ' +
+ 'PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator ' +
+ 'Extend IntoIterator DoubleEndedIterator ExactSizeIterator Option ' +
+ 'Result SliceConcatExt String ToString Vec ' +
+ // macros
+ 'assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! ' +
+ 'debug_assert! debug_assert_eq! env! panic! file! format! format_args! ' +
+ 'include_bin! include_str! line! local_data_key! module_path! ' +
+ 'option_env! print! println! select! stringify! try! unimplemented! ' +
+ 'unreachable! vec! write! writeln! macro_rules!';
+ return {
+ aliases: ['rs'],
+ keywords: {
+ keyword:
+ KEYWORDS,
+ literal:
+ 'true false Some None Ok Err',
+ built_in:
+ BUILTINS
+ },
+ lexemes: hljs.IDENT_RE + '!?',
+ illegal: '</',
+ contains: [
+ hljs.C_LINE_COMMENT_MODE,
+ BLOCK_COMMENT,
+ hljs.inherit(hljs.QUOTE_STRING_MODE, {begin: /b?"/, illegal: null}),
+ {
+ className: 'string',
+ variants: [
+ { begin: /r(#*)".*?"\1(?!#)/ },
+ { begin: /b?'\\?(x\w{2}|u\w{4}|U\w{8}|.)'/ }
+ ]
+ },
+ {
+ className: 'symbol',
+ begin: /'[a-zA-Z_][a-zA-Z0-9_]*/
+ },
+ {
+ className: 'number',
+ variants: [
+ { begin: '\\b0b([01_]+)' + NUM_SUFFIX },
+ { begin: '\\b0o([0-7_]+)' + NUM_SUFFIX },
+ { begin: '\\b0x([A-Fa-f0-9_]+)' + NUM_SUFFIX },
+ { begin: '\\b(\\d[\\d_]*(\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)' +
+ NUM_SUFFIX
+ }
+ ],
+ relevance: 0
+ },
+ {
+ className: 'function',
+ beginKeywords: 'fn', end: '(\\(|<)', excludeEnd: true,
+ contains: [hljs.UNDERSCORE_TITLE_MODE]
+ },
+ {
+ className: 'meta',
+ begin: '#\\!?\\[', end: '\\]',
+ contains: [
+ {
+ className: 'meta-string',
+ begin: /"/, end: /"/
+ }
+ ]
+ },
+ {
+ className: 'class',
+ beginKeywords: 'type', end: ';',
+ contains: [
+ hljs.inherit(hljs.UNDERSCORE_TITLE_MODE, {endsParent: true})
+ ],
+ illegal: '\\S'
+ },
+ {
+ className: 'class',
+ beginKeywords: 'trait enum struct', end: '{',
+ contains: [
+ hljs.inherit(hljs.UNDERSCORE_TITLE_MODE, {endsParent: true})
+ ],
+ illegal: '[\\w\\d]'
+ },
+ {
+ begin: hljs.IDENT_RE + '::',
+ keywords: {built_in: BUILTINS}
+ },
+ {
+ begin: '->'
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("scala",
+/*
+Language: Scala
+Category: functional
+Author: Jan Berkel <jan.berkel@gmail.com>
+Contributors: Erik Osheim <d_m@plastic-idolatry.com>
+*/
+
+function(hljs) {
+
+ var ANNOTATION = { className: 'meta', begin: '@[A-Za-z]+' };
+
+ // used in strings for escaping/interpolation/substitution
+ var SUBST = {
+ className: 'subst',
+ variants: [
+ {begin: '\\$[A-Za-z0-9_]+'},
+ {begin: '\\${', end: '}'}
+ ]
+ };
+
+ var STRING = {
+ className: 'string',
+ variants: [
+ {
+ begin: '"', end: '"',
+ illegal: '\\n',
+ contains: [hljs.BACKSLASH_ESCAPE]
+ },
+ {
+ begin: '"""', end: '"""',
+ relevance: 10
+ },
+ {
+ begin: '[a-z]+"', end: '"',
+ illegal: '\\n',
+ contains: [hljs.BACKSLASH_ESCAPE, SUBST]
+ },
+ {
+ className: 'string',
+ begin: '[a-z]+"""', end: '"""',
+ contains: [SUBST],
+ relevance: 10
+ }
+ ]
+
+ };
+
+ var SYMBOL = {
+ className: 'symbol',
+ begin: '\'\\w[\\w\\d_]*(?!\')'
+ };
+
+ var TYPE = {
+ className: 'type',
+ begin: '\\b[A-Z][A-Za-z0-9_]*',
+ relevance: 0
+ };
+
+ var NAME = {
+ className: 'title',
+ begin: /[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,
+ relevance: 0
+ };
+
+ var CLASS = {
+ className: 'class',
+ beginKeywords: 'class object trait type',
+ end: /[:={\[\n;]/,
+ excludeEnd: true,
+ contains: [
+ {
+ beginKeywords: 'extends with',
+ relevance: 10
+ },
+ {
+ begin: /\[/,
+ end: /\]/,
+ excludeBegin: true,
+ excludeEnd: true,
+ relevance: 0,
+ contains: [TYPE]
+ },
+ {
+ className: 'params',
+ begin: /\(/,
+ end: /\)/,
+ excludeBegin: true,
+ excludeEnd: true,
+ relevance: 0,
+ contains: [TYPE]
+ },
+ NAME
+ ]
+ };
+
+ var METHOD = {
+ className: 'function',
+ beginKeywords: 'def',
+ end: /[:={\[(\n;]/,
+ excludeEnd: true,
+ contains: [NAME]
+ };
+
+ return {
+ keywords: {
+ literal: 'true false null',
+ keyword: 'type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit'
+ },
+ contains: [
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ STRING,
+ SYMBOL,
+ TYPE,
+ METHOD,
+ CLASS,
+ hljs.C_NUMBER_MODE,
+ ANNOTATION
+ ]
+ };
+});
+
+hljs.registerLanguage("scheme",
+/*
+Language: Scheme
+Description: Keywords based on http://community.schemewiki.org/?scheme-keywords
+Author: JP Verkamp <me@jverkamp.com>
+Contributors: Ivan Sagalaev <maniac@softwaremaniacs.org>
+Origin: clojure.js
+Category: lisp
+*/
+
+function(hljs) {
+ var SCHEME_IDENT_RE = '[^\\(\\)\\[\\]\\{\\}",\'`;#|\\\\\\s]+';
+ var SCHEME_SIMPLE_NUMBER_RE = '(\\-|\\+)?\\d+([./]\\d+)?';
+ var SCHEME_COMPLEX_NUMBER_RE = SCHEME_SIMPLE_NUMBER_RE + '[+\\-]' + SCHEME_SIMPLE_NUMBER_RE + 'i';
+ var BUILTINS = {
+ 'builtin-name':
+ 'case-lambda call/cc class define-class exit-handler field import ' +
+ 'inherit init-field interface let*-values let-values let/ec mixin ' +
+ 'opt-lambda override protect provide public rename require ' +
+ 'require-for-syntax syntax syntax-case syntax-error unit/sig unless ' +
+ 'when with-syntax and begin call-with-current-continuation ' +
+ 'call-with-input-file call-with-output-file case cond define ' +
+ 'define-syntax delay do dynamic-wind else for-each if lambda let let* ' +
+ 'let-syntax letrec letrec-syntax map or syntax-rules \' * + , ,@ - ... / ' +
+ '; < <= = => > >= ` abs acos angle append apply asin assoc assq assv atan ' +
+ 'boolean? caar cadr call-with-input-file call-with-output-file ' +
+ 'call-with-values car cdddar cddddr cdr ceiling char->integer ' +
+ 'char-alphabetic? char-ci<=? char-ci<? char-ci=? char-ci>=? char-ci>? ' +
+ 'char-downcase char-lower-case? char-numeric? char-ready? char-upcase ' +
+ 'char-upper-case? char-whitespace? char<=? char<? char=? char>=? char>? ' +
+ 'char? close-input-port close-output-port complex? cons cos ' +
+ 'current-input-port current-output-port denominator display eof-object? ' +
+ 'eq? equal? eqv? eval even? exact->inexact exact? exp expt floor ' +
+ 'force gcd imag-part inexact->exact inexact? input-port? integer->char ' +
+ 'integer? interaction-environment lcm length list list->string ' +
+ 'list->vector list-ref list-tail list? load log magnitude make-polar ' +
+ 'make-rectangular make-string make-vector max member memq memv min ' +
+ 'modulo negative? newline not null-environment null? number->string ' +
+ 'number? numerator odd? open-input-file open-output-file output-port? ' +
+ 'pair? peek-char port? positive? procedure? quasiquote quote quotient ' +
+ 'rational? rationalize read read-char real-part real? remainder reverse ' +
+ 'round scheme-report-environment set! set-car! set-cdr! sin sqrt string ' +
+ 'string->list string->number string->symbol string-append string-ci<=? ' +
+ 'string-ci<? string-ci=? string-ci>=? string-ci>? string-copy ' +
+ 'string-fill! string-length string-ref string-set! string<=? string<? ' +
+ 'string=? string>=? string>? string? substring symbol->string symbol? ' +
+ 'tan transcript-off transcript-on truncate values vector ' +
+ 'vector->list vector-fill! vector-length vector-ref vector-set! ' +
+ 'with-input-from-file with-output-to-file write write-char zero?'
+ };
+
+ var SHEBANG = {
+ className: 'meta',
+ begin: '^#!',
+ end: '$'
+ };
+
+ var LITERAL = {
+ className: 'literal',
+ begin: '(#t|#f|#\\\\' + SCHEME_IDENT_RE + '|#\\\\.)'
+ };
+
+ var NUMBER = {
+ className: 'number',
+ variants: [
+ { begin: SCHEME_SIMPLE_NUMBER_RE, relevance: 0 },
+ { begin: SCHEME_COMPLEX_NUMBER_RE, relevance: 0 },
+ { begin: '#b[0-1]+(/[0-1]+)?' },
+ { begin: '#o[0-7]+(/[0-7]+)?' },
+ { begin: '#x[0-9a-f]+(/[0-9a-f]+)?' }
+ ]
+ };
+
+ var STRING = hljs.QUOTE_STRING_MODE;
+
+ var REGULAR_EXPRESSION = {
+ className: 'regexp',
+ begin: '#[pr]x"',
+ end: '[^\\\\]"'
+ };
+
+ var COMMENT_MODES = [
+ hljs.COMMENT(
+ ';',
+ '$',
+ {
+ relevance: 0
+ }
+ ),
+ hljs.COMMENT('#\\|', '\\|#')
+ ];
+
+ var IDENT = {
+ begin: SCHEME_IDENT_RE,
+ relevance: 0
+ };
+
+ var QUOTED_IDENT = {
+ className: 'symbol',
+ begin: '\'' + SCHEME_IDENT_RE
+ };
+
+ var BODY = {
+ endsWithParent: true,
+ relevance: 0
+ };
+
+ var QUOTED_LIST = {
+ begin: /'/,
+ contains: [
+ {
+ begin: '\\(', end: '\\)',
+ contains: ['self', LITERAL, STRING, NUMBER, IDENT, QUOTED_IDENT]
+ }
+ ]
+ };
+
+ var NAME = {
+ className: 'name',
+ begin: SCHEME_IDENT_RE,
+ lexemes: SCHEME_IDENT_RE,
+ keywords: BUILTINS
+ };
+
+ var LAMBDA = {
+ begin: /lambda/, endsWithParent: true, returnBegin: true,
+ contains: [
+ NAME,
+ {
+ begin: /\(/, end: /\)/, endsParent: true,
+ contains: [IDENT],
+ }
+ ]
+ };
+
+ var LIST = {
+ variants: [
+ { begin: '\\(', end: '\\)' },
+ { begin: '\\[', end: '\\]' }
+ ],
+ contains: [LAMBDA, NAME, BODY]
+ };
+
+ BODY.contains = [LITERAL, NUMBER, STRING, IDENT, QUOTED_IDENT, QUOTED_LIST, LIST].concat(COMMENT_MODES);
+
+ return {
+ illegal: /\S/,
+ contains: [SHEBANG, NUMBER, STRING, QUOTED_IDENT, QUOTED_LIST, LIST].concat(COMMENT_MODES)
+ };
+});
+
+hljs.registerLanguage("scilab",
+/*
+Language: Scilab
+Author: Sylvestre Ledru <sylvestre.ledru@scilab-enterprises.com>
+Origin: matlab.js
+Description: Scilab is a port from Matlab
+Category: scientific
+*/
+
+function(hljs) {
+
+ var COMMON_CONTAINS = [
+ hljs.C_NUMBER_MODE,
+ {
+ className: 'string',
+ begin: '\'|\"', end: '\'|\"',
+ contains: [hljs.BACKSLASH_ESCAPE, {begin: '\'\''}]
+ }
+ ];
+
+ return {
+ aliases: ['sci'],
+ lexemes: /%?\w+/,
+ keywords: {
+ keyword: 'abort break case clear catch continue do elseif else endfunction end for function '+
+ 'global if pause return resume select try then while',
+ literal:
+ '%f %F %t %T %pi %eps %inf %nan %e %i %z %s',
+ built_in: // Scilab has more than 2000 functions. Just list the most commons
+ 'abs and acos asin atan ceil cd chdir clearglobal cosh cos cumprod deff disp error '+
+ 'exec execstr exists exp eye gettext floor fprintf fread fsolve imag isdef isempty '+
+ 'isinfisnan isvector lasterror length load linspace list listfiles log10 log2 log '+
+ 'max min msprintf mclose mopen ones or pathconvert poly printf prod pwd rand real '+
+ 'round sinh sin size gsort sprintf sqrt strcat strcmps tring sum system tanh tan '+
+ 'type typename warning zeros matrix'
+ },
+ illegal: '("|#|/\\*|\\s+/\\w+)',
+ contains: [
+ {
+ className: 'function',
+ beginKeywords: 'function', end: '$',
+ contains: [
+ hljs.UNDERSCORE_TITLE_MODE,
+ {
+ className: 'params',
+ begin: '\\(', end: '\\)'
+ }
+ ]
+ },
+ {
+ begin: '[a-zA-Z_][a-zA-Z_0-9]*(\'+[\\.\']*|[\\.\']+)', end: '',
+ relevance: 0
+ },
+ {
+ begin: '\\[', end: '\\]\'*[\\.\']*',
+ relevance: 0,
+ contains: COMMON_CONTAINS
+ },
+ hljs.COMMENT('//', '$')
+ ].concat(COMMON_CONTAINS)
+ };
+});
+
+hljs.registerLanguage("scss",
+/*
+Language: SCSS
+Author: Kurt Emch <kurt@kurtemch.com>
+Category: css
+*/
+function(hljs) {
+ var IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';
+ var VARIABLE = {
+ className: 'variable',
+ begin: '(\\$' + IDENT_RE + ')\\b'
+ };
+ var HEXCOLOR = {
+ className: 'number', begin: '#[0-9A-Fa-f]+'
+ };
+ var DEF_INTERNALS = {
+ className: 'attribute',
+ begin: '[A-Z\\_\\.\\-]+', end: ':',
+ excludeEnd: true,
+ illegal: '[^\\s]',
+ starts: {
+ endsWithParent: true, excludeEnd: true,
+ contains: [
+ HEXCOLOR,
+ hljs.CSS_NUMBER_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.APOS_STRING_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ {
+ className: 'meta', begin: '!important'
+ }
+ ]
+ }
+ };
+ return {
+ case_insensitive: true,
+ illegal: '[=/|\']',
+ contains: [
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ {
+ className: 'selector-id', begin: '\\#[A-Za-z0-9_-]+',
+ relevance: 0
+ },
+ {
+ className: 'selector-class', begin: '\\.[A-Za-z0-9_-]+',
+ relevance: 0
+ },
+ {
+ className: 'selector-attr', begin: '\\[', end: '\\]',
+ illegal: '$'
+ },
+ {
+ className: 'selector-tag', // begin: IDENT_RE, end: '[,|\\s]'
+ begin: '\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b',
+ relevance: 0
+ },
+ {
+ begin: ':(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)'
+ },
+ {
+ begin: '::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)'
+ },
+ VARIABLE,
+ {
+ className: 'attribute',
+ begin: '\\b(z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b',
+ illegal: '[^\\s]'
+ },
+ {
+ begin: '\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b'
+ },
+ {
+ begin: ':', end: ';',
+ contains: [
+ VARIABLE,
+ HEXCOLOR,
+ hljs.CSS_NUMBER_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.APOS_STRING_MODE,
+ {
+ className: 'meta', begin: '!important'
+ }
+ ]
+ },
+ {
+ begin: '@', end: '[{;]',
+ keywords: 'mixin include extend for if else each while charset import debug media page content font-face namespace warn',
+ contains: [
+ VARIABLE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.APOS_STRING_MODE,
+ HEXCOLOR,
+ hljs.CSS_NUMBER_MODE,
+ {
+ begin: '\\s[A-Za-z0-9_.-]+',
+ relevance: 0
+ }
+ ]
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("smali",
+/*
+Language: Smali
+Author: Dennis Titze <dennis.titze@gmail.com>
+Description: Basic Smali highlighting
+*/
+
+function(hljs) {
+ var smali_instr_low_prio = ['add', 'and', 'cmp', 'cmpg', 'cmpl', 'const', 'div', 'double', 'float', 'goto', 'if', 'int', 'long', 'move', 'mul', 'neg', 'new', 'nop', 'not', 'or', 'rem', 'return', 'shl', 'shr', 'sput', 'sub', 'throw', 'ushr', 'xor'];
+ var smali_instr_high_prio = ['aget', 'aput', 'array', 'check', 'execute', 'fill', 'filled', 'goto/16', 'goto/32', 'iget', 'instance', 'invoke', 'iput', 'monitor', 'packed', 'sget', 'sparse'];
+ var smali_keywords = ['transient', 'constructor', 'abstract', 'final', 'synthetic', 'public', 'private', 'protected', 'static', 'bridge', 'system'];
+ return {
+ aliases: ['smali'],
+ contains: [
+ {
+ className: 'string',
+ begin: '"', end: '"',
+ relevance: 0
+ },
+ hljs.COMMENT(
+ '#',
+ '$',
+ {
+ relevance: 0
+ }
+ ),
+ {
+ className: 'keyword',
+ variants: [
+ {begin: '\\s*\\.end\\s[a-zA-Z0-9]*'},
+ {begin: '^[ ]*\\.[a-zA-Z]*', relevance: 0},
+ {begin: '\\s:[a-zA-Z_0-9]*', relevance: 0},
+ {begin: '\\s(' + smali_keywords.join('|') + ')'}
+ ]
+ },
+ {
+ className: 'built_in',
+ variants : [
+ {
+ begin: '\\s('+smali_instr_low_prio.join('|')+')\\s'
+ },
+ {
+ begin: '\\s('+smali_instr_low_prio.join('|')+')((\\-|/)[a-zA-Z0-9]+)+\\s',
+ relevance: 10
+ },
+ {
+ begin: '\\s('+smali_instr_high_prio.join('|')+')((\\-|/)[a-zA-Z0-9]+)*\\s',
+ relevance: 10
+ },
+ ]
+ },
+ {
+ className: 'class',
+ begin: 'L[^\(;:\n]*;',
+ relevance: 0
+ },
+ {
+ begin: '[vp][0-9]+',
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("smalltalk",
+/*
+Language: Smalltalk
+Author: Vladimir Gubarkov <xonixx@gmail.com>
+*/
+
+function(hljs) {
+ var VAR_IDENT_RE = '[a-z][a-zA-Z0-9_]*';
+ var CHAR = {
+ className: 'string',
+ begin: '\\$.{1}'
+ };
+ var SYMBOL = {
+ className: 'symbol',
+ begin: '#' + hljs.UNDERSCORE_IDENT_RE
+ };
+ return {
+ aliases: ['st'],
+ keywords: 'self super nil true false thisContext', // only 6
+ contains: [
+ hljs.COMMENT('"', '"'),
+ hljs.APOS_STRING_MODE,
+ {
+ className: 'type',
+ begin: '\\b[A-Z][A-Za-z0-9_]*',
+ relevance: 0
+ },
+ {
+ begin: VAR_IDENT_RE + ':',
+ relevance: 0
+ },
+ hljs.C_NUMBER_MODE,
+ SYMBOL,
+ CHAR,
+ {
+ // This looks more complicated than needed to avoid combinatorial
+ // explosion under V8. It effectively means `| var1 var2 ... |` with
+ // whitespace adjacent to `|` being optional.
+ begin: '\\|[ ]*' + VAR_IDENT_RE + '([ ]+' + VAR_IDENT_RE + ')*[ ]*\\|',
+ returnBegin: true, end: /\|/,
+ illegal: /\S/,
+ contains: [{begin: '(\\|[ ]*)?' + VAR_IDENT_RE}]
+ },
+ {
+ begin: '\\#\\(', end: '\\)',
+ contains: [
+ hljs.APOS_STRING_MODE,
+ CHAR,
+ hljs.C_NUMBER_MODE,
+ SYMBOL
+ ]
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("sml",
+/*
+Language: SML
+Author: Edwin Dalorzo <edwin@dalorzo.org>
+Description: SML language definition.
+Origin: ocaml.js
+Category: functional
+*/
+function(hljs) {
+ return {
+ aliases: ['ml'],
+ keywords: {
+ keyword:
+ /* according to Definition of Standard ML 97 */
+ 'abstype and andalso as case datatype do else end eqtype ' +
+ 'exception fn fun functor handle if in include infix infixr ' +
+ 'let local nonfix of op open orelse raise rec sharing sig ' +
+ 'signature struct structure then type val with withtype where while',
+ built_in:
+ /* built-in types according to basis library */
+ 'array bool char exn int list option order real ref string substring vector unit word',
+ literal:
+ 'true false NONE SOME LESS EQUAL GREATER nil'
+ },
+ illegal: /\/\/|>>/,
+ lexemes: '[a-z_]\\w*!?',
+ contains: [
+ {
+ className: 'literal',
+ begin: /\[(\|\|)?\]|\(\)/,
+ relevance: 0
+ },
+ hljs.COMMENT(
+ '\\(\\*',
+ '\\*\\)',
+ {
+ contains: ['self']
+ }
+ ),
+ { /* type variable */
+ className: 'symbol',
+ begin: '\'[A-Za-z_](?!\')[\\w\']*'
+ /* the grammar is ambiguous on how 'a'b should be interpreted but not the compiler */
+ },
+ { /* polymorphic variant */
+ className: 'type',
+ begin: '`[A-Z][\\w\']*'
+ },
+ { /* module or constructor */
+ className: 'type',
+ begin: '\\b[A-Z][\\w\']*',
+ relevance: 0
+ },
+ { /* don't color identifiers, but safely catch all identifiers with '*/
+ begin: '[a-z_]\\w*\'[\\w\']*'
+ },
+ hljs.inherit(hljs.APOS_STRING_MODE, {className: 'string', relevance: 0}),
+ hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null}),
+ {
+ className: 'number',
+ begin:
+ '\\b(0[xX][a-fA-F0-9_]+[Lln]?|' +
+ '0[oO][0-7_]+[Lln]?|' +
+ '0[bB][01_]+[Lln]?|' +
+ '[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)',
+ relevance: 0
+ },
+ {
+ begin: /[-=]>/ // relevance booster
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("sqf",
+/*
+Language: SQF
+Author: Søren Enevoldsen <senevoldsen90@gmail.com>
+Description: Scripting language for the Arma game series
+Requires: cpp.js
+*/
+
+function(hljs) {
+ var CPP = hljs.getLanguage('cpp').exports;
+
+ // In SQF strings, quotes matching the start are escaped by adding a consecutive.
+ // Example of single escaped quotes: " "" " and ' '' '.
+ var STRINGS = {
+ className: 'string',
+ variants: [
+ {
+ begin: '"',
+ end: '"',
+ contains: [{begin: '""', relevance: 0}]
+ },
+ {
+ begin: '\'',
+ end: '\'',
+ contains: [{begin: '\'\'', relevance: 0}]
+ }
+ ]
+ };
+
+ return {
+ aliases: ['sqf'],
+ case_insensitive: true,
+ keywords: {
+ keyword:
+ 'case catch default do else exit exitWith for forEach from if ' +
+ 'switch then throw to try while with',
+ built_in:
+ 'or plus abs accTime acos action actionKeys actionKeysImages ' +
+ 'actionKeysNames actionKeysNamesArray actionName activateAddons ' +
+ 'activatedAddons activateKey addAction addBackpack addBackpackCargo ' +
+ 'addBackpackCargoGlobal addBackpackGlobal addCamShake ' +
+ 'addCuratorAddons addCuratorCameraArea addCuratorEditableObjects ' +
+ 'addCuratorEditingArea addCuratorPoints addEditorObject ' +
+ 'addEventHandler addGoggles addGroupIcon addHandgunItem addHeadgear ' +
+ 'addItem addItemCargo addItemCargoGlobal addItemPool ' +
+ 'addItemToBackpack addItemToUniform addItemToVest addLiveStats ' +
+ 'addMagazine addMagazine array addMagazineAmmoCargo ' +
+ 'addMagazineCargo addMagazineCargoGlobal addMagazineGlobal ' +
+ 'addMagazinePool addMagazines addMagazineTurret addMenu addMenuItem ' +
+ 'addMissionEventHandler addMPEventHandler addMusicEventHandler ' +
+ 'addPrimaryWeaponItem addPublicVariableEventHandler addRating ' +
+ 'addResources addScore addScoreSide addSecondaryWeaponItem ' +
+ 'addSwitchableUnit addTeamMember addToRemainsCollector addUniform ' +
+ 'addVehicle addVest addWaypoint addWeapon addWeaponCargo ' +
+ 'addWeaponCargoGlobal addWeaponGlobal addWeaponPool addWeaponTurret ' +
+ 'agent agents AGLToASL aimedAtTarget aimPos airDensityRTD ' +
+ 'airportSide AISFinishHeal alive allControls allCurators allDead ' +
+ 'allDeadMen allDisplays allGroups allMapMarkers allMines ' +
+ 'allMissionObjects allow3DMode allowCrewInImmobile ' +
+ 'allowCuratorLogicIgnoreAreas allowDamage allowDammage ' +
+ 'allowFileOperations allowFleeing allowGetIn allPlayers allSites ' +
+ 'allTurrets allUnits allUnitsUAV allVariables ammo and animate ' +
+ 'animateDoor animationPhase animationState append armoryPoints ' +
+ 'arrayIntersect asin ASLToAGL ASLToATL assert assignAsCargo ' +
+ 'assignAsCargoIndex assignAsCommander assignAsDriver assignAsGunner ' +
+ 'assignAsTurret assignCurator assignedCargo assignedCommander ' +
+ 'assignedDriver assignedGunner assignedItems assignedTarget ' +
+ 'assignedTeam assignedVehicle assignedVehicleRole assignItem ' +
+ 'assignTeam assignToAirport atan atan2 atg ATLToASL attachedObject ' +
+ 'attachedObjects attachedTo attachObject attachTo attackEnabled ' +
+ 'backpack backpackCargo backpackContainer backpackItems ' +
+ 'backpackMagazines backpackSpaceFor behaviour benchmark binocular ' +
+ 'blufor boundingBox boundingBoxReal boundingCenter breakOut breakTo ' +
+ 'briefingName buildingExit buildingPos buttonAction buttonSetAction ' +
+ 'cadetMode call callExtension camCommand camCommit ' +
+ 'camCommitPrepared camCommitted camConstuctionSetParams camCreate ' +
+ 'camDestroy cameraEffect cameraEffectEnableHUD cameraInterest ' +
+ 'cameraOn cameraView campaignConfigFile camPreload camPreloaded ' +
+ 'camPrepareBank camPrepareDir camPrepareDive camPrepareFocus ' +
+ 'camPrepareFov camPrepareFovRange camPreparePos camPrepareRelPos ' +
+ 'camPrepareTarget camSetBank camSetDir camSetDive camSetFocus ' +
+ 'camSetFov camSetFovRange camSetPos camSetRelPos camSetTarget ' +
+ 'camTarget camUseNVG canAdd canAddItemToBackpack ' +
+ 'canAddItemToUniform canAddItemToVest cancelSimpleTaskDestination ' +
+ 'canFire canMove canSlingLoad canStand canUnloadInCombat captive ' +
+ 'captiveNum cbChecked cbSetChecked ceil cheatsEnabled ' +
+ 'checkAIFeature civilian className clearAllItemsFromBackpack ' +
+ 'clearBackpackCargo clearBackpackCargoGlobal clearGroupIcons ' +
+ 'clearItemCargo clearItemCargoGlobal clearItemPool ' +
+ 'clearMagazineCargo clearMagazineCargoGlobal clearMagazinePool ' +
+ 'clearOverlay clearRadio clearWeaponCargo clearWeaponCargoGlobal ' +
+ 'clearWeaponPool closeDialog closeDisplay closeOverlay ' +
+ 'collapseObjectTree combatMode commandArtilleryFire commandChat ' +
+ 'commander commandFire commandFollow commandFSM commandGetOut ' +
+ 'commandingMenu commandMove commandRadio commandStop commandTarget ' +
+ 'commandWatch comment commitOverlay compile compileFinal ' +
+ 'completedFSM composeText configClasses configFile configHierarchy ' +
+ 'configName configProperties configSourceMod configSourceModList ' +
+ 'connectTerminalToUAV controlNull controlsGroupCtrl ' +
+ 'copyFromClipboard copyToClipboard copyWaypoints cos count ' +
+ 'countEnemy countFriendly countSide countType countUnknown ' +
+ 'createAgent createCenter createDialog createDiaryLink ' +
+ 'createDiaryRecord createDiarySubject createDisplay ' +
+ 'createGearDialog createGroup createGuardedPoint createLocation ' +
+ 'createMarker createMarkerLocal createMenu createMine ' +
+ 'createMissionDisplay createSimpleTask createSite createSoundSource ' +
+ 'createTask createTeam createTrigger createUnit createUnit array ' +
+ 'createVehicle createVehicle array createVehicleCrew ' +
+ 'createVehicleLocal crew ctrlActivate ctrlAddEventHandler ' +
+ 'ctrlAutoScrollDelay ctrlAutoScrollRewind ctrlAutoScrollSpeed ' +
+ 'ctrlChecked ctrlClassName ctrlCommit ctrlCommitted ctrlCreate ' +
+ 'ctrlDelete ctrlEnable ctrlEnabled ctrlFade ctrlHTMLLoaded ctrlIDC ' +
+ 'ctrlIDD ctrlMapAnimAdd ctrlMapAnimClear ctrlMapAnimCommit ' +
+ 'ctrlMapAnimDone ctrlMapCursor ctrlMapMouseOver ctrlMapScale ' +
+ 'ctrlMapScreenToWorld ctrlMapWorldToScreen ctrlModel ' +
+ 'ctrlModelDirAndUp ctrlModelScale ctrlParent ctrlPosition ' +
+ 'ctrlRemoveAllEventHandlers ctrlRemoveEventHandler ctrlScale ' +
+ 'ctrlSetActiveColor ctrlSetAutoScrollDelay ctrlSetAutoScrollRewind ' +
+ 'ctrlSetAutoScrollSpeed ctrlSetBackgroundColor ctrlSetChecked ' +
+ 'ctrlSetEventHandler ctrlSetFade ctrlSetFocus ctrlSetFont ' +
+ 'ctrlSetFontH1 ctrlSetFontH1B ctrlSetFontH2 ctrlSetFontH2B ' +
+ 'ctrlSetFontH3 ctrlSetFontH3B ctrlSetFontH4 ctrlSetFontH4B ' +
+ 'ctrlSetFontH5 ctrlSetFontH5B ctrlSetFontH6 ctrlSetFontH6B ' +
+ 'ctrlSetFontHeight ctrlSetFontHeightH1 ctrlSetFontHeightH2 ' +
+ 'ctrlSetFontHeightH3 ctrlSetFontHeightH4 ctrlSetFontHeightH5 ' +
+ 'ctrlSetFontHeightH6 ctrlSetFontP ctrlSetFontPB ' +
+ 'ctrlSetForegroundColor ctrlSetModel ctrlSetModelDirAndUp ' +
+ 'ctrlSetModelScale ctrlSetPosition ctrlSetScale ' +
+ 'ctrlSetStructuredText ctrlSetText ctrlSetTextColor ctrlSetTooltip ' +
+ 'ctrlSetTooltipColorBox ctrlSetTooltipColorShade ' +
+ 'ctrlSetTooltipColorText ctrlShow ctrlShown ctrlText ctrlTextHeight ' +
+ 'ctrlType ctrlVisible curatorAddons curatorCamera curatorCameraArea ' +
+ 'curatorCameraAreaCeiling curatorCoef curatorEditableObjects ' +
+ 'curatorEditingArea curatorEditingAreaType curatorMouseOver ' +
+ 'curatorPoints curatorRegisteredObjects curatorSelected ' +
+ 'curatorWaypointCost currentChannel currentCommand currentMagazine ' +
+ 'currentMagazineDetail currentMagazineDetailTurret ' +
+ 'currentMagazineTurret currentMuzzle currentNamespace currentTask ' +
+ 'currentTasks currentThrowable currentVisionMode currentWaypoint ' +
+ 'currentWeapon currentWeaponMode currentWeaponTurret currentZeroing ' +
+ 'cursorTarget customChat customRadio cutFadeOut cutObj cutRsc ' +
+ 'cutText damage date dateToNumber daytime deActivateKey ' +
+ 'debriefingText debugFSM debugLog deg deleteAt deleteCenter ' +
+ 'deleteCollection deleteEditorObject deleteGroup deleteIdentity ' +
+ 'deleteLocation deleteMarker deleteMarkerLocal deleteRange ' +
+ 'deleteResources deleteSite deleteStatus deleteTeam deleteVehicle ' +
+ 'deleteVehicleCrew deleteWaypoint detach detectedMines ' +
+ 'diag activeMissionFSMs diag activeSQFScripts diag activeSQSScripts ' +
+ 'diag captureFrame diag captureSlowFrame diag fps diag fpsMin ' +
+ 'diag frameNo diag log diag logSlowFrame diag tickTime dialog ' +
+ 'diarySubjectExists didJIP didJIPOwner difficulty difficultyEnabled ' +
+ 'difficultyEnabledRTD direction directSay disableAI ' +
+ 'disableCollisionWith disableConversation disableDebriefingStats ' +
+ 'disableSerialization disableTIEquipment disableUAVConnectability ' +
+ 'disableUserInput displayAddEventHandler displayCtrl displayNull ' +
+ 'displayRemoveAllEventHandlers displayRemoveEventHandler ' +
+ 'displaySetEventHandler dissolveTeam distance distance2D ' +
+ 'distanceSqr distributionRegion doArtilleryFire doFire doFollow ' +
+ 'doFSM doGetOut doMove doorPhase doStop doTarget doWatch drawArrow ' +
+ 'drawEllipse drawIcon drawIcon3D drawLine drawLine3D drawLink ' +
+ 'drawLocation drawRectangle driver drop east echo editObject ' +
+ 'editorSetEventHandler effectiveCommander emptyPositions enableAI ' +
+ 'enableAIFeature enableAttack enableCamShake enableCaustics ' +
+ 'enableCollisionWith enableCopilot enableDebriefingStats ' +
+ 'enableDiagLegend enableEndDialog enableEngineArtillery ' +
+ 'enableEnvironment enableFatigue enableGunLights enableIRLasers ' +
+ 'enableMimics enablePersonTurret enableRadio enableReload ' +
+ 'enableRopeAttach enableSatNormalOnDetail enableSaving ' +
+ 'enableSentences enableSimulation enableSimulationGlobal ' +
+ 'enableTeamSwitch enableUAVConnectability enableUAVWaypoints ' +
+ 'endLoadingScreen endMission engineOn enginesIsOnRTD enginesRpmRTD ' +
+ 'enginesTorqueRTD entities estimatedEndServerTime estimatedTimeLeft ' +
+ 'evalObjectArgument everyBackpack everyContainer exec ' +
+ 'execEditorScript execFSM execVM exp expectedDestination ' +
+ 'eyeDirection eyePos face faction fadeMusic fadeRadio fadeSound ' +
+ 'fadeSpeech failMission fillWeaponsFromPool find findCover ' +
+ 'findDisplay findEditorObject findEmptyPosition ' +
+ 'findEmptyPositionReady findNearestEnemy finishMissionInit finite ' +
+ 'fire fireAtTarget firstBackpack flag flagOwner fleeing floor ' +
+ 'flyInHeight fog fogForecast fogParams forceAddUniform forceEnd ' +
+ 'forceMap forceRespawn forceSpeed forceWalk forceWeaponFire ' +
+ 'forceWeatherChange forEachMember forEachMemberAgent ' +
+ 'forEachMemberTeam format formation formationDirection ' +
+ 'formationLeader formationMembers formationPosition formationTask ' +
+ 'formatText formLeader freeLook fromEditor fuel fullCrew ' +
+ 'gearSlotAmmoCount gearSlotData getAllHitPointsDamage getAmmoCargo ' +
+ 'getArray getArtilleryAmmo getArtilleryComputerSettings ' +
+ 'getArtilleryETA getAssignedCuratorLogic getAssignedCuratorUnit ' +
+ 'getBackpackCargo getBleedingRemaining getBurningValue ' +
+ 'getCargoIndex getCenterOfMass getClientState getConnectedUAV ' +
+ 'getDammage getDescription getDir getDirVisual getDLCs ' +
+ 'getEditorCamera getEditorMode getEditorObjectScope ' +
+ 'getElevationOffset getFatigue getFriend getFSMVariable ' +
+ 'getFuelCargo getGroupIcon getGroupIconParams getGroupIcons ' +
+ 'getHideFrom getHit getHitIndex getHitPointDamage getItemCargo ' +
+ 'getMagazineCargo getMarkerColor getMarkerPos getMarkerSize ' +
+ 'getMarkerType getMass getModelInfo getNumber getObjectArgument ' +
+ 'getObjectChildren getObjectDLC getObjectMaterials getObjectProxy ' +
+ 'getObjectTextures getObjectType getObjectViewDistance ' +
+ 'getOxygenRemaining getPersonUsedDLCs getPlayerChannel getPlayerUID ' +
+ 'getPos getPosASL getPosASLVisual getPosASLW getPosATL ' +
+ 'getPosATLVisual getPosVisual getPosWorld getRepairCargo ' +
+ 'getResolution getShadowDistance getSlingLoad getSpeed ' +
+ 'getSuppression getTerrainHeightASL getText getVariable ' +
+ 'getWeaponCargo getWPPos glanceAt globalChat globalRadio goggles ' +
+ 'goto group groupChat groupFromNetId groupIconSelectable ' +
+ 'groupIconsVisible groupId groupOwner groupRadio groupSelectedUnits ' +
+ 'groupSelectUnit grpNull gunner gusts halt handgunItems ' +
+ 'handgunMagazine handgunWeapon handsHit hasInterface hasWeapon ' +
+ 'hcAllGroups hcGroupParams hcLeader hcRemoveAllGroups hcRemoveGroup ' +
+ 'hcSelected hcSelectGroup hcSetGroup hcShowBar hcShownBar headgear ' +
+ 'hideBody hideObject hideObjectGlobal hint hintC hintCadet ' +
+ 'hintSilent hmd hostMission htmlLoad HUDMovementLevels humidity ' +
+ 'image importAllGroups importance in incapacitatedState independent ' +
+ 'inflame inflamed inGameUISetEventHandler inheritsFrom ' +
+ 'initAmbientLife inputAction inRangeOfArtillery insertEditorObject ' +
+ 'intersect isAbleToBreathe isAgent isArray isAutoHoverOn ' +
+ 'isAutonomous isAutotest isBleeding isBurning isClass ' +
+ 'isCollisionLightOn isCopilotEnabled isDedicated isDLCAvailable ' +
+ 'isEngineOn isEqualTo isFlashlightOn isFlatEmpty isForcedWalk ' +
+ 'isFormationLeader isHidden isInRemainsCollector ' +
+ 'isInstructorFigureEnabled isIRLaserOn isKeyActive isKindOf ' +
+ 'isLightOn isLocalized isManualFire isMarkedForCollection ' +
+ 'isMultiplayer isNil isNull isNumber isObjectHidden isObjectRTD ' +
+ 'isOnRoad isPipEnabled isPlayer isRealTime isServer ' +
+ 'isShowing3DIcons isSteamMission isStreamFriendlyUIEnabled isText ' +
+ 'isTouchingGround isTurnedOut isTutHintsEnabled isUAVConnectable ' +
+ 'isUAVConnected isUniformAllowed isWalking isWeaponDeployed ' +
+ 'isWeaponRested itemCargo items itemsWithMagazines join joinAs ' +
+ 'joinAsSilent joinSilent joinString kbAddDatabase ' +
+ 'kbAddDatabaseTargets kbAddTopic kbHasTopic kbReact kbRemoveTopic ' +
+ 'kbTell kbWasSaid keyImage keyName knowsAbout land landAt ' +
+ 'landResult language laserTarget lbAdd lbClear lbColor lbCurSel ' +
+ 'lbData lbDelete lbIsSelected lbPicture lbSelection lbSetColor ' +
+ 'lbSetCurSel lbSetData lbSetPicture lbSetPictureColor ' +
+ 'lbSetPictureColorDisabled lbSetPictureColorSelected ' +
+ 'lbSetSelectColor lbSetSelectColorRight lbSetSelected lbSetTooltip ' +
+ 'lbSetValue lbSize lbSort lbSortByValue lbText lbValue leader ' +
+ 'leaderboardDeInit leaderboardGetRows leaderboardInit leaveVehicle ' +
+ 'libraryCredits libraryDisclaimers lifeState lightAttachObject ' +
+ 'lightDetachObject lightIsOn lightnings limitSpeed linearConversion ' +
+ 'lineBreak lineIntersects lineIntersectsObjs lineIntersectsSurfaces ' +
+ 'lineIntersectsWith linkItem list listObjects ln lnbAddArray ' +
+ 'lnbAddColumn lnbAddRow lnbClear lnbColor lnbCurSelRow lnbData ' +
+ 'lnbDeleteColumn lnbDeleteRow lnbGetColumnsPosition lnbPicture ' +
+ 'lnbSetColor lnbSetColumnsPos lnbSetCurSelRow lnbSetData ' +
+ 'lnbSetPicture lnbSetText lnbSetValue lnbSize lnbText lnbValue load ' +
+ 'loadAbs loadBackpack loadFile loadGame loadIdentity loadMagazine ' +
+ 'loadOverlay loadStatus loadUniform loadVest local localize ' +
+ 'locationNull locationPosition lock lockCameraTo lockCargo ' +
+ 'lockDriver locked lockedCargo lockedDriver lockedTurret lockTurret ' +
+ 'lockWP log logEntities lookAt lookAtPos magazineCargo magazines ' +
+ 'magazinesAllTurrets magazinesAmmo magazinesAmmoCargo ' +
+ 'magazinesAmmoFull magazinesDetail magazinesDetailBackpack ' +
+ 'magazinesDetailUniform magazinesDetailVest magazinesTurret ' +
+ 'magazineTurretAmmo mapAnimAdd mapAnimClear mapAnimCommit ' +
+ 'mapAnimDone mapCenterOnCamera mapGridPosition ' +
+ 'markAsFinishedOnSteam markerAlpha markerBrush markerColor ' +
+ 'markerDir markerPos markerShape markerSize markerText markerType ' +
+ 'max members min mineActive mineDetectedBy missionConfigFile ' +
+ 'missionName missionNamespace missionStart mod modelToWorld ' +
+ 'modelToWorldVisual moonIntensity morale move moveInAny moveInCargo ' +
+ 'moveInCommander moveInDriver moveInGunner moveInTurret ' +
+ 'moveObjectToEnd moveOut moveTime moveTo moveToCompleted ' +
+ 'moveToFailed musicVolume name name location nameSound nearEntities ' +
+ 'nearestBuilding nearestLocation nearestLocations ' +
+ 'nearestLocationWithDubbing nearestObject nearestObjects ' +
+ 'nearObjects nearObjectsReady nearRoads nearSupplies nearTargets ' +
+ 'needReload netId netObjNull newOverlay nextMenuItemIndex ' +
+ 'nextWeatherChange nMenuItems not numberToDate objectCurators ' +
+ 'objectFromNetId objectParent objNull objStatus onBriefingGroup ' +
+ 'onBriefingNotes onBriefingPlan onBriefingTeamSwitch ' +
+ 'onCommandModeChanged onDoubleClick onEachFrame onGroupIconClick ' +
+ 'onGroupIconOverEnter onGroupIconOverLeave ' +
+ 'onHCGroupSelectionChanged onMapSingleClick onPlayerConnected ' +
+ 'onPlayerDisconnected onPreloadFinished onPreloadStarted ' +
+ 'onShowNewObject onTeamSwitch openCuratorInterface openMap ' +
+ 'openYoutubeVideo opfor or orderGetIn overcast overcastForecast ' +
+ 'owner param params parseNumber parseText parsingNamespace ' +
+ 'particlesQuality pi pickWeaponPool pitch playableSlotsNumber ' +
+ 'playableUnits playAction playActionNow player playerRespawnTime ' +
+ 'playerSide playersNumber playGesture playMission playMove ' +
+ 'playMoveNow playMusic playScriptedMission playSound playSound3D ' +
+ 'position positionCameraToWorld posScreenToWorld posWorldToScreen ' +
+ 'ppEffectAdjust ppEffectCommit ppEffectCommitted ppEffectCreate ' +
+ 'ppEffectDestroy ppEffectEnable ppEffectForceInNVG precision ' +
+ 'preloadCamera preloadObject preloadSound preloadTitleObj ' +
+ 'preloadTitleRsc preprocessFile preprocessFileLineNumbers ' +
+ 'primaryWeapon primaryWeaponItems primaryWeaponMagazine priority ' +
+ 'private processDiaryLink productVersion profileName ' +
+ 'profileNamespace profileNameSteam progressLoadingScreen ' +
+ 'progressPosition progressSetPosition publicVariable ' +
+ 'publicVariableClient publicVariableServer pushBack putWeaponPool ' +
+ 'queryItemsPool queryMagazinePool queryWeaponPool rad ' +
+ 'radioChannelAdd radioChannelCreate radioChannelRemove ' +
+ 'radioChannelSetCallSign radioChannelSetLabel radioVolume rain ' +
+ 'rainbow random rank rankId rating rectangular registeredTasks ' +
+ 'registerTask reload reloadEnabled remoteControl remoteExec ' +
+ 'remoteExecCall removeAction removeAllActions ' +
+ 'removeAllAssignedItems removeAllContainers removeAllCuratorAddons ' +
+ 'removeAllCuratorCameraAreas removeAllCuratorEditingAreas ' +
+ 'removeAllEventHandlers removeAllHandgunItems removeAllItems ' +
+ 'removeAllItemsWithMagazines removeAllMissionEventHandlers ' +
+ 'removeAllMPEventHandlers removeAllMusicEventHandlers ' +
+ 'removeAllPrimaryWeaponItems removeAllWeapons removeBackpack ' +
+ 'removeBackpackGlobal removeCuratorAddons removeCuratorCameraArea ' +
+ 'removeCuratorEditableObjects removeCuratorEditingArea ' +
+ 'removeDrawIcon removeDrawLinks removeEventHandler ' +
+ 'removeFromRemainsCollector removeGoggles removeGroupIcon ' +
+ 'removeHandgunItem removeHeadgear removeItem removeItemFromBackpack ' +
+ 'removeItemFromUniform removeItemFromVest removeItems ' +
+ 'removeMagazine removeMagazineGlobal removeMagazines ' +
+ 'removeMagazinesTurret removeMagazineTurret removeMenuItem ' +
+ 'removeMissionEventHandler removeMPEventHandler ' +
+ 'removeMusicEventHandler removePrimaryWeaponItem ' +
+ 'removeSecondaryWeaponItem removeSimpleTask removeSwitchableUnit ' +
+ 'removeTeamMember removeUniform removeVest removeWeapon ' +
+ 'removeWeaponGlobal removeWeaponTurret requiredVersion ' +
+ 'resetCamShake resetSubgroupDirection resistance resize resources ' +
+ 'respawnVehicle restartEditorCamera reveal revealMine reverse ' +
+ 'reversedMouseY roadsConnectedTo roleDescription ' +
+ 'ropeAttachedObjects ropeAttachedTo ropeAttachEnabled ropeAttachTo ' +
+ 'ropeCreate ropeCut ropeEndPosition ropeLength ropes ropeUnwind ' +
+ 'ropeUnwound rotorsForcesRTD rotorsRpmRTD round runInitScript ' +
+ 'safeZoneH safeZoneW safeZoneWAbs safeZoneX safeZoneXAbs safeZoneY ' +
+ 'saveGame saveIdentity saveJoysticks saveOverlay ' +
+ 'saveProfileNamespace saveStatus saveVar savingEnabled say say2D ' +
+ 'say3D scopeName score scoreSide screenToWorld scriptDone ' +
+ 'scriptName scriptNull scudState secondaryWeapon ' +
+ 'secondaryWeaponItems secondaryWeaponMagazine select ' +
+ 'selectBestPlaces selectDiarySubject selectedEditorObjects ' +
+ 'selectEditorObject selectionPosition selectLeader selectNoPlayer ' +
+ 'selectPlayer selectWeapon selectWeaponTurret sendAUMessage ' +
+ 'sendSimpleCommand sendTask sendTaskResult sendUDPMessage ' +
+ 'serverCommand serverCommandAvailable serverCommandExecutable ' +
+ 'serverName serverTime set setAccTime setAirportSide setAmmo ' +
+ 'setAmmoCargo setAperture setApertureNew setArmoryPoints ' +
+ 'setAttributes setAutonomous setBehaviour setBleedingRemaining ' +
+ 'setCameraInterest setCamShakeDefParams setCamShakeParams ' +
+ 'setCamUseTi setCaptive setCenterOfMass setCollisionLight ' +
+ 'setCombatMode setCompassOscillation setCuratorCameraAreaCeiling ' +
+ 'setCuratorCoef setCuratorEditingAreaType setCuratorWaypointCost ' +
+ 'setCurrentChannel setCurrentTask setCurrentWaypoint setDamage ' +
+ 'setDammage setDate setDebriefingText setDefaultCamera ' +
+ 'setDestination setDetailMapBlendPars setDir setDirection ' +
+ 'setDrawIcon setDropInterval setEditorMode setEditorObjectScope ' +
+ 'setEffectCondition setFace setFaceAnimation setFatigue ' +
+ 'setFlagOwner setFlagSide setFlagTexture setFog setFog array ' +
+ 'setFormation setFormationTask setFormDir setFriend setFromEditor ' +
+ 'setFSMVariable setFuel setFuelCargo setGroupIcon ' +
+ 'setGroupIconParams setGroupIconsSelectable setGroupIconsVisible ' +
+ 'setGroupId setGroupIdGlobal setGroupOwner setGusts setHideBehind ' +
+ 'setHit setHitIndex setHitPointDamage setHorizonParallaxCoef ' +
+ 'setHUDMovementLevels setIdentity setImportance setLeader ' +
+ 'setLightAmbient setLightAttenuation setLightBrightness ' +
+ 'setLightColor setLightDayLight setLightFlareMaxDistance ' +
+ 'setLightFlareSize setLightIntensity setLightnings setLightUseFlare ' +
+ 'setLocalWindParams setMagazineTurretAmmo setMarkerAlpha ' +
+ 'setMarkerAlphaLocal setMarkerBrush setMarkerBrushLocal ' +
+ 'setMarkerColor setMarkerColorLocal setMarkerDir setMarkerDirLocal ' +
+ 'setMarkerPos setMarkerPosLocal setMarkerShape setMarkerShapeLocal ' +
+ 'setMarkerSize setMarkerSizeLocal setMarkerText setMarkerTextLocal ' +
+ 'setMarkerType setMarkerTypeLocal setMass setMimic setMousePosition ' +
+ 'setMusicEffect setMusicEventHandler setName setNameSound ' +
+ 'setObjectArguments setObjectMaterial setObjectProxy ' +
+ 'setObjectTexture setObjectTextureGlobal setObjectViewDistance ' +
+ 'setOvercast setOwner setOxygenRemaining setParticleCircle ' +
+ 'setParticleClass setParticleFire setParticleParams ' +
+ 'setParticleRandom setPilotLight setPiPEffect setPitch setPlayable ' +
+ 'setPlayerRespawnTime setPos setPosASL setPosASL2 setPosASLW ' +
+ 'setPosATL setPosition setPosWorld setRadioMsg setRain setRainbow ' +
+ 'setRandomLip setRank setRectangular setRepairCargo ' +
+ 'setShadowDistance setSide setSimpleTaskDescription ' +
+ 'setSimpleTaskDestination setSimpleTaskTarget setSimulWeatherLayers ' +
+ 'setSize setSkill setSkill array setSlingLoad setSoundEffect ' +
+ 'setSpeaker setSpeech setSpeedMode setStatValue setSuppression ' +
+ 'setSystemOfUnits setTargetAge setTaskResult setTaskState ' +
+ 'setTerrainGrid setText setTimeMultiplier setTitleEffect ' +
+ 'setTriggerActivation setTriggerArea setTriggerStatements ' +
+ 'setTriggerText setTriggerTimeout setTriggerType setType ' +
+ 'setUnconscious setUnitAbility setUnitPos setUnitPosWeak ' +
+ 'setUnitRank setUnitRecoilCoefficient setUnloadInCombat ' +
+ 'setUserActionText setVariable setVectorDir setVectorDirAndUp ' +
+ 'setVectorUp setVehicleAmmo setVehicleAmmoDef setVehicleArmor ' +
+ 'setVehicleId setVehicleLock setVehiclePosition setVehicleTiPars ' +
+ 'setVehicleVarName setVelocity setVelocityTransformation ' +
+ 'setViewDistance setVisibleIfTreeCollapsed setWaves ' +
+ 'setWaypointBehaviour setWaypointCombatMode ' +
+ 'setWaypointCompletionRadius setWaypointDescription ' +
+ 'setWaypointFormation setWaypointHousePosition ' +
+ 'setWaypointLoiterRadius setWaypointLoiterType setWaypointName ' +
+ 'setWaypointPosition setWaypointScript setWaypointSpeed ' +
+ 'setWaypointStatements setWaypointTimeout setWaypointType ' +
+ 'setWaypointVisible setWeaponReloadingTime setWind setWindDir ' +
+ 'setWindForce setWindStr setWPPos show3DIcons showChat ' +
+ 'showCinemaBorder showCommandingMenu showCompass showCuratorCompass ' +
+ 'showGPS showHUD showLegend showMap shownArtilleryComputer ' +
+ 'shownChat shownCompass shownCuratorCompass showNewEditorObject ' +
+ 'shownGPS shownHUD shownMap shownPad shownRadio shownUAVFeed ' +
+ 'shownWarrant shownWatch showPad showRadio showSubtitles ' +
+ 'showUAVFeed showWarrant showWatch showWaypoint side sideChat ' +
+ 'sideEnemy sideFriendly sideLogic sideRadio sideUnknown simpleTasks ' +
+ 'simulationEnabled simulCloudDensity simulCloudOcclusion ' +
+ 'simulInClouds simulWeatherSync sin size sizeOf skill skillFinal ' +
+ 'skipTime sleep sliderPosition sliderRange sliderSetPosition ' +
+ 'sliderSetRange sliderSetSpeed sliderSpeed slingLoadAssistantShown ' +
+ 'soldierMagazines someAmmo sort soundVolume spawn speaker speed ' +
+ 'speedMode splitString sqrt squadParams stance startLoadingScreen ' +
+ 'step stop stopped str sunOrMoon supportInfo suppressFor ' +
+ 'surfaceIsWater surfaceNormal surfaceType swimInDepth ' +
+ 'switchableUnits switchAction switchCamera switchGesture ' +
+ 'switchLight switchMove synchronizedObjects synchronizedTriggers ' +
+ 'synchronizedWaypoints synchronizeObjectsAdd ' +
+ 'synchronizeObjectsRemove synchronizeTrigger synchronizeWaypoint ' +
+ 'synchronizeWaypoint trigger systemChat systemOfUnits tan ' +
+ 'targetKnowledge targetsAggregate targetsQuery taskChildren ' +
+ 'taskCompleted taskDescription taskDestination taskHint taskNull ' +
+ 'taskParent taskResult taskState teamMember teamMemberNull teamName ' +
+ 'teams teamSwitch teamSwitchEnabled teamType terminate ' +
+ 'terrainIntersect terrainIntersectASL text text location textLog ' +
+ 'textLogFormat tg time timeMultiplier titleCut titleFadeOut ' +
+ 'titleObj titleRsc titleText toArray toLower toString toUpper ' +
+ 'triggerActivated triggerActivation triggerArea ' +
+ 'triggerAttachedVehicle triggerAttachObject triggerAttachVehicle ' +
+ 'triggerStatements triggerText triggerTimeout triggerTimeoutCurrent ' +
+ 'triggerType turretLocal turretOwner turretUnit tvAdd tvClear ' +
+ 'tvCollapse tvCount tvCurSel tvData tvDelete tvExpand tvPicture ' +
+ 'tvSetCurSel tvSetData tvSetPicture tvSetPictureColor tvSetTooltip ' +
+ 'tvSetValue tvSort tvSortByValue tvText tvValue type typeName ' +
+ 'typeOf UAVControl uiNamespace uiSleep unassignCurator unassignItem ' +
+ 'unassignTeam unassignVehicle underwater uniform uniformContainer ' +
+ 'uniformItems uniformMagazines unitAddons unitBackpack unitPos ' +
+ 'unitReady unitRecoilCoefficient units unitsBelowHeight unlinkItem ' +
+ 'unlockAchievement unregisterTask updateDrawIcon updateMenuItem ' +
+ 'updateObjectTree useAudioTimeForMoves vectorAdd vectorCos ' +
+ 'vectorCrossProduct vectorDiff vectorDir vectorDirVisual ' +
+ 'vectorDistance vectorDistanceSqr vectorDotProduct vectorFromTo ' +
+ 'vectorMagnitude vectorMagnitudeSqr vectorMultiply vectorNormalized ' +
+ 'vectorUp vectorUpVisual vehicle vehicleChat vehicleRadio vehicles ' +
+ 'vehicleVarName velocity velocityModelSpace verifySignature vest ' +
+ 'vestContainer vestItems vestMagazines viewDistance visibleCompass ' +
+ 'visibleGPS visibleMap visiblePosition visiblePositionASL ' +
+ 'visibleWatch waitUntil waves waypointAttachedObject ' +
+ 'waypointAttachedVehicle waypointAttachObject waypointAttachVehicle ' +
+ 'waypointBehaviour waypointCombatMode waypointCompletionRadius ' +
+ 'waypointDescription waypointFormation waypointHousePosition ' +
+ 'waypointLoiterRadius waypointLoiterType waypointName ' +
+ 'waypointPosition waypoints waypointScript waypointsEnabledUAV ' +
+ 'waypointShow waypointSpeed waypointStatements waypointTimeout ' +
+ 'waypointTimeoutCurrent waypointType waypointVisible ' +
+ 'weaponAccessories weaponCargo weaponDirection weaponLowered ' +
+ 'weapons weaponsItems weaponsItemsCargo weaponState weaponsTurret ' +
+ 'weightRTD west WFSideText wind windDir windStr wingsForcesRTD ' +
+ 'worldName worldSize worldToModel worldToModelVisual worldToScreen ' +
+ '_forEachIndex _this _x',
+ literal:
+ 'true false nil'
+ },
+ contains: [
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.NUMBER_MODE,
+ STRINGS,
+ CPP.preprocessor
+ ],
+ illegal: /#/
+ };
+});
+
+hljs.registerLanguage("sql",
+/*
+ Language: SQL
+ Contributors: Nikolay Lisienko <info@neor.ru>, Heiko August <post@auge8472.de>, Travis Odom <travis.a.odom@gmail.com>, Vadimtro <vadimtro@yahoo.com>, Benjamin Auder <benjamin.auder@gmail.com>
+ Category: common
+ */
+
+function(hljs) {
+ var COMMENT_MODE = hljs.COMMENT('--', '$');
+ return {
+ case_insensitive: true,
+ illegal: /[<>{}*#]/,
+ contains: [
+ {
+ beginKeywords:
+ 'begin end start commit rollback savepoint lock alter create drop rename call ' +
+ 'delete do handler insert load replace select truncate update set show pragma grant ' +
+ 'merge describe use explain help declare prepare execute deallocate release ' +
+ 'unlock purge reset change stop analyze cache flush optimize repair kill ' +
+ 'install uninstall checksum restore check backup revoke',
+ end: /;/, endsWithParent: true,
+ lexemes: /[\w\.]+/,
+ keywords: {
+ keyword:
+ 'abort abs absolute acc acce accep accept access accessed accessible account acos action activate add ' +
+ 'addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias ' +
+ 'allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply ' +
+ 'archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan ' +
+ 'atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid ' +
+ 'authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile ' +
+ 'before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float ' +
+ 'binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound ' +
+ 'buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel ' +
+ 'capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base ' +
+ 'char_length character_length characters characterset charindex charset charsetform charsetid check ' +
+ 'checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close ' +
+ 'cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation ' +
+ 'collect colu colum column column_value columns columns_updated comment commit compact compatibility ' +
+ 'compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn ' +
+ 'connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection ' +
+ 'consider consistent constant constraint constraints constructor container content contents context ' +
+ 'contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost ' +
+ 'count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation ' +
+ 'critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user ' +
+ 'cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add ' +
+ 'date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts ' +
+ 'day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate ' +
+ 'declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults ' +
+ 'deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank ' +
+ 'depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor ' +
+ 'deterministic diagnostics difference dimension direct_load directory disable disable_all ' +
+ 'disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div ' +
+ 'do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable ' +
+ 'editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt ' +
+ 'end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors ' +
+ 'escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding ' +
+ 'execu execut execute exempt exists exit exp expire explain export export_set extended extent external ' +
+ 'external_1 external_2 externally extract failed failed_login_attempts failover failure far fast ' +
+ 'feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final ' +
+ 'finish first first_value fixed flash_cache flashback floor flush following follows for forall force ' +
+ 'form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ' +
+ 'ftp full function general generated get get_format get_lock getdate getutcdate global global_name ' +
+ 'globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups ' +
+ 'gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex ' +
+ 'hierarchy high high_priority hosts hour http id ident_current ident_incr ident_seed identified ' +
+ 'identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment ' +
+ 'index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile ' +
+ 'initial initialized initially initrans inmemory inner innodb input insert install instance instantiable ' +
+ 'instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat ' +
+ 'is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists ' +
+ 'keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lax lcase ' +
+ 'lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit ' +
+ 'lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate ' +
+ 'locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call ' +
+ 'logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime ' +
+ 'managed management manual map mapping mask master master_pos_wait match matched materialized max ' +
+ 'maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans ' +
+ 'md5 measures median medium member memcompress memory merge microsecond mid migration min minextents ' +
+ 'minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month ' +
+ 'months mount move movement multiset mutex name name_const names nan national native natural nav nchar ' +
+ 'nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile ' +
+ 'nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile ' +
+ 'nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder ' +
+ 'nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck ' +
+ 'noswitch not nothing notice notrim novalidate now nowait nth_value nullif nulls num numb numbe ' +
+ 'nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ' +
+ 'ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old ' +
+ 'on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date ' +
+ 'oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary ' +
+ 'out outer outfile outline output over overflow overriding package pad parallel parallel_enable ' +
+ 'parameters parent parse partial partition partitions pascal passing password password_grace_time ' +
+ 'password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex ' +
+ 'pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc ' +
+ 'performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin ' +
+ 'policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction ' +
+ 'prediction_cost prediction_details prediction_probability prediction_set prepare present preserve ' +
+ 'prior priority private private_sga privileges procedural procedure procedure_analyze processlist ' +
+ 'profiles project prompt protection public publishingservername purge quarter query quick quiesce quota ' +
+ 'quotename radians raise rand range rank raw read reads readsize rebuild record records ' +
+ 'recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh ' +
+ 'regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy ' +
+ 'reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename ' +
+ 'repair repeat replace replicate replication required reset resetlogs resize resource respect restore ' +
+ 'restricted result result_cache resumable resume retention return returning returns reuse reverse revoke ' +
+ 'right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows ' +
+ 'rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll ' +
+ 'sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment select ' +
+ 'self sequence sequential serializable server servererror session session_user sessions_per_user set ' +
+ 'sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor ' +
+ 'si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin ' +
+ 'size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex ' +
+ 'source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows ' +
+ 'sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone ' +
+ 'standby start starting startup statement static statistics stats_binomial_test stats_crosstab ' +
+ 'stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep ' +
+ 'stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev ' +
+ 'stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate ' +
+ 'subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum ' +
+ 'suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate ' +
+ 'sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tan tdo ' +
+ 'template temporary terminated tertiary_weights test than then thread through tier ties time time_format ' +
+ 'time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr ' +
+ 'timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking ' +
+ 'transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate ' +
+ 'try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress ' +
+ 'under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unpivot ' +
+ 'unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert ' +
+ 'url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date ' +
+ 'utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var ' +
+ 'var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray ' +
+ 'verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear ' +
+ 'wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped ' +
+ 'xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces ' +
+ 'xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek',
+ literal:
+ 'true false null',
+ built_in:
+ 'array bigint binary bit blob boolean char character date dec decimal float int int8 integer interval number ' +
+ 'numeric real record serial serial8 smallint text varchar varying void'
+ },
+ contains: [
+ {
+ className: 'string',
+ begin: '\'', end: '\'',
+ contains: [hljs.BACKSLASH_ESCAPE, {begin: '\'\''}]
+ },
+ {
+ className: 'string',
+ begin: '"', end: '"',
+ contains: [hljs.BACKSLASH_ESCAPE, {begin: '""'}]
+ },
+ {
+ className: 'string',
+ begin: '`', end: '`',
+ contains: [hljs.BACKSLASH_ESCAPE]
+ },
+ hljs.C_NUMBER_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ COMMENT_MODE
+ ]
+ },
+ hljs.C_BLOCK_COMMENT_MODE,
+ COMMENT_MODE
+ ]
+ };
+});
+
+hljs.registerLanguage("stan",
+/*
+Language: Stan
+Author: Brendan Rocks <rocks.brendan@gmail.com>
+ Category: scientific
+Description: The Stan probabilistic programming language (http://mc-stan.org/).
+*/
+
+function(hljs) {
+ return {
+ contains: [
+ hljs.HASH_COMMENT_MODE,
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ {
+ begin: hljs.UNDERSCORE_IDENT_RE,
+ lexemes: hljs.UNDERSCORE_IDENT_RE,
+ keywords: {
+ // Stan's keywords
+ name:
+ 'for in while repeat until if then else',
+ // Stan's probablity distributions (less beta and gamma, as commonly
+ // used for parameter names). So far, _log and _rng variants are not
+ // included
+ symbol:
+ 'bernoulli bernoulli_logit binomial binomial_logit ' +
+ 'beta_binomial hypergeometric categorical categorical_logit ' +
+ 'ordered_logistic neg_binomial neg_binomial_2 ' +
+ 'neg_binomial_2_log poisson poisson_log multinomial normal ' +
+ 'exp_mod_normal skew_normal student_t cauchy double_exponential ' +
+ 'logistic gumbel lognormal chi_square inv_chi_square ' +
+ 'scaled_inv_chi_square exponential inv_gamma weibull frechet ' +
+ 'rayleigh wiener pareto pareto_type_2 von_mises uniform ' +
+ 'multi_normal multi_normal_prec multi_normal_cholesky multi_gp ' +
+ 'multi_gp_cholesky multi_student_t gaussian_dlm_obs dirichlet ' +
+ 'lkj_corr lkj_corr_cholesky wishart inv_wishart',
+ // Stan's data types
+ 'selector-tag':
+ 'int real vector simplex unit_vector ordered positive_ordered ' +
+ 'row_vector matrix cholesky_factor_corr cholesky_factor_cov ' +
+ 'corr_matrix cov_matrix',
+ // Stan's model blocks
+ title:
+ 'functions model data parameters quantities transformed ' +
+ 'generated',
+ literal:
+ 'true false'
+ },
+ relevance: 0
+ },
+ // The below is all taken from the R language definition
+ {
+ // hex value
+ className: 'number',
+ begin: "0[xX][0-9a-fA-F]+[Li]?\\b",
+ relevance: 0
+ },
+ {
+ // hex value
+ className: 'number',
+ begin: "0[xX][0-9a-fA-F]+[Li]?\\b",
+ relevance: 0
+ },
+ {
+ // explicit integer
+ className: 'number',
+ begin: "\\d+(?:[eE][+\\-]?\\d*)?L\\b",
+ relevance: 0
+ },
+ {
+ // number with trailing decimal
+ className: 'number',
+ begin: "\\d+\\.(?!\\d)(?:i\\b)?",
+ relevance: 0
+ },
+ {
+ // number
+ className: 'number',
+ begin: "\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",
+ relevance: 0
+ },
+ {
+ // number with leading decimal
+ className: 'number',
+ begin: "\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",
+ relevance: 0
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("stata",
+/*
+Language: Stata
+Author: Brian Quistorff <bquistorff@gmail.com>
+Contributors: Drew McDonald <drewmcdo@gmail.com>
+Description: Syntax highlighting for Stata code. This is a fork and modification of Drew McDonald's file (https://github.com/drewmcdonald/stata-highlighting). I have also included a list of builtin commands from https://bugs.kde.org/show_bug.cgi?id=135646.
+Category: scientific
+*/
+
+function(hljs) {
+ return {
+ aliases: ['do', 'ado'],
+ case_insensitive: true,
+ keywords: 'if else in foreach for forv forva forval forvalu forvalue forvalues by bys bysort xi quietly qui capture about ac ac_7 acprplot acprplot_7 adjust ado adopath adoupdate alpha ameans an ano anov anova anova_estat anova_terms anovadef aorder ap app appe appen append arch arch_dr arch_estat arch_p archlm areg areg_p args arima arima_dr arima_estat arima_p as asmprobit asmprobit_estat asmprobit_lf asmprobit_mfx__dlg asmprobit_p ass asse asser assert avplot avplot_7 avplots avplots_7 bcskew0 bgodfrey binreg bip0_lf biplot bipp_lf bipr_lf bipr_p biprobit bitest bitesti bitowt blogit bmemsize boot bootsamp bootstrap bootstrap_8 boxco_l boxco_p boxcox boxcox_6 boxcox_p bprobit br break brier bro brow brows browse brr brrstat bs bs_7 bsampl_w bsample bsample_7 bsqreg bstat bstat_7 bstat_8 bstrap bstrap_7 ca ca_estat ca_p cabiplot camat canon canon_8 canon_8_p canon_estat canon_p cap caprojection capt captu captur capture cat cc cchart cchart_7 cci cd censobs_table centile cf char chdir checkdlgfiles checkestimationsample checkhlpfiles checksum chelp ci cii cl class classutil clear cli clis clist clo clog clog_lf clog_p clogi clogi_sw clogit clogit_lf clogit_p clogitp clogl_sw cloglog clonevar clslistarray cluster cluster_measures cluster_stop cluster_tree cluster_tree_8 clustermat cmdlog cnr cnre cnreg cnreg_p cnreg_sw cnsreg codebook collaps4 collapse colormult_nb colormult_nw compare compress conf confi confir confirm conren cons const constr constra constrai constrain constraint continue contract copy copyright copysource cor corc corr corr2data corr_anti corr_kmo corr_smc corre correl correla correlat correlate corrgram cou coun count cox cox_p cox_sw coxbase coxhaz coxvar cprplot cprplot_7 crc cret cretu cretur creturn cross cs cscript cscript_log csi ct ct_is ctset ctst_5 ctst_st cttost cumsp cumsp_7 cumul cusum cusum_7 cutil d|0 datasig datasign datasigna datasignat datasignatu datasignatur datasignature datetof db dbeta de dec deco decod decode deff des desc descr descri describ describe destring dfbeta dfgls dfuller di di_g dir dirstats dis discard disp disp_res disp_s displ displa display distinct do doe doed doedi doedit dotplot dotplot_7 dprobit drawnorm drop ds ds_util dstdize duplicates durbina dwstat dydx e|0 ed edi edit egen eivreg emdef en enc enco encod encode eq erase ereg ereg_lf ereg_p ereg_sw ereghet ereghet_glf ereghet_glf_sh ereghet_gp ereghet_ilf ereghet_ilf_sh ereghet_ip eret eretu eretur ereturn err erro error est est_cfexist est_cfname est_clickable est_expand est_hold est_table est_unhold est_unholdok estat estat_default estat_summ estat_vce_only esti estimates etodow etof etomdy ex exi exit expand expandcl fac fact facto factor factor_estat factor_p factor_pca_rotated factor_rotate factormat fcast fcast_compute fcast_graph fdades fdadesc fdadescr fdadescri fdadescrib fdadescribe fdasav fdasave fdause fh_st file open file read file close file filefilter fillin find_hlp_file findfile findit findit_7 fit fl fli flis flist for5_0 form forma format fpredict frac_154 frac_adj frac_chk frac_cox frac_ddp frac_dis frac_dv frac_in frac_mun frac_pp frac_pq frac_pv frac_wgt frac_xo fracgen fracplot fracplot_7 fracpoly fracpred fron_ex fron_hn fron_p fron_tn fron_tn2 frontier ftodate ftoe ftomdy ftowdate g|0 gamhet_glf gamhet_gp gamhet_ilf gamhet_ip gamma gamma_d2 gamma_p gamma_sw gammahet gdi_hexagon gdi_spokes ge gen gene gener genera generat generate genrank genstd genvmean gettoken gl gladder gladder_7 glim_l01 glim_l02 glim_l03 glim_l04 glim_l05 glim_l06 glim_l07 glim_l08 glim_l09 glim_l10 glim_l11 glim_l12 glim_lf glim_mu glim_nw1 glim_nw2 glim_nw3 glim_p glim_v1 glim_v2 glim_v3 glim_v4 glim_v5 glim_v6 glim_v7 glm glm_6 glm_p glm_sw glmpred glo glob globa global glogit glogit_8 glogit_p gmeans gnbre_lf gnbreg gnbreg_5 gnbreg_p gomp_lf gompe_sw gomper_p gompertz gompertzhet gomphet_glf gomphet_glf_sh gomphet_gp gomphet_ilf gomphet_ilf_sh gomphet_ip gphdot gphpen gphprint gprefs gprobi_p gprobit gprobit_8 gr gr7 gr_copy gr_current gr_db gr_describe gr_dir gr_draw gr_draw_replay gr_drop gr_edit gr_editviewopts gr_example gr_example2 gr_export gr_print gr_qscheme gr_query gr_read gr_rename gr_replay gr_save gr_set gr_setscheme gr_table gr_undo gr_use graph graph7 grebar greigen greigen_7 greigen_8 grmeanby grmeanby_7 gs_fileinfo gs_filetype gs_graphinfo gs_stat gsort gwood h|0 hadimvo hareg hausman haver he heck_d2 heckma_p heckman heckp_lf heckpr_p heckprob hel help hereg hetpr_lf hetpr_p hetprob hettest hexdump hilite hist hist_7 histogram hlogit hlu hmeans hotel hotelling hprobit hreg hsearch icd9 icd9_ff icd9p iis impute imtest inbase include inf infi infil infile infix inp inpu input ins insheet insp inspe inspec inspect integ inten intreg intreg_7 intreg_p intrg2_ll intrg_ll intrg_ll2 ipolate iqreg ir irf irf_create irfm iri is_svy is_svysum isid istdize ivprob_1_lf ivprob_lf ivprobit ivprobit_p ivreg ivreg_footnote ivtob_1_lf ivtob_lf ivtobit ivtobit_p jackknife jacknife jknife jknife_6 jknife_8 jkstat joinby kalarma1 kap kap_3 kapmeier kappa kapwgt kdensity kdensity_7 keep ksm ksmirnov ktau kwallis l|0 la lab labe label labelbook ladder levels levelsof leverage lfit lfit_p li lincom line linktest lis list lloghet_glf lloghet_glf_sh lloghet_gp lloghet_ilf lloghet_ilf_sh lloghet_ip llogi_sw llogis_p llogist llogistic llogistichet lnorm_lf lnorm_sw lnorma_p lnormal lnormalhet lnormhet_glf lnormhet_glf_sh lnormhet_gp lnormhet_ilf lnormhet_ilf_sh lnormhet_ip lnskew0 loadingplot loc loca local log logi logis_lf logistic logistic_p logit logit_estat logit_p loglogs logrank loneway lookfor lookup lowess lowess_7 lpredict lrecomp lroc lroc_7 lrtest ls lsens lsens_7 lsens_x lstat ltable ltable_7 ltriang lv lvr2plot lvr2plot_7 m|0 ma mac macr macro makecns man manova manova_estat manova_p manovatest mantel mark markin markout marksample mat mat_capp mat_order mat_put_rr mat_rapp mata mata_clear mata_describe mata_drop mata_matdescribe mata_matsave mata_matuse mata_memory mata_mlib mata_mosave mata_rename mata_which matalabel matcproc matlist matname matr matri matrix matrix_input__dlg matstrik mcc mcci md0_ md1_ md1debug_ md2_ md2debug_ mds mds_estat mds_p mdsconfig mdslong mdsmat mdsshepard mdytoe mdytof me_derd mean means median memory memsize meqparse mer merg merge mfp mfx mhelp mhodds minbound mixed_ll mixed_ll_reparm mkassert mkdir mkmat mkspline ml ml_5 ml_adjs ml_bhhhs ml_c_d ml_check ml_clear ml_cnt ml_debug ml_defd ml_e0 ml_e0_bfgs ml_e0_cycle ml_e0_dfp ml_e0i ml_e1 ml_e1_bfgs ml_e1_bhhh ml_e1_cycle ml_e1_dfp ml_e2 ml_e2_cycle ml_ebfg0 ml_ebfr0 ml_ebfr1 ml_ebh0q ml_ebhh0 ml_ebhr0 ml_ebr0i ml_ecr0i ml_edfp0 ml_edfr0 ml_edfr1 ml_edr0i ml_eds ml_eer0i ml_egr0i ml_elf ml_elf_bfgs ml_elf_bhhh ml_elf_cycle ml_elf_dfp ml_elfi ml_elfs ml_enr0i ml_enrr0 ml_erdu0 ml_erdu0_bfgs ml_erdu0_bhhh ml_erdu0_bhhhq ml_erdu0_cycle ml_erdu0_dfp ml_erdu0_nrbfgs ml_exde ml_footnote ml_geqnr ml_grad0 ml_graph ml_hbhhh ml_hd0 ml_hold ml_init ml_inv ml_log ml_max ml_mlout ml_mlout_8 ml_model ml_nb0 ml_opt ml_p ml_plot ml_query ml_rdgrd ml_repor ml_s_e ml_score ml_searc ml_technique ml_unhold mleval mlf_ mlmatbysum mlmatsum mlog mlogi mlogit mlogit_footnote mlogit_p mlopts mlsum mlvecsum mnl0_ mor more mov move mprobit mprobit_lf mprobit_p mrdu0_ mrdu1_ mvdecode mvencode mvreg mvreg_estat n|0 nbreg nbreg_al nbreg_lf nbreg_p nbreg_sw nestreg net newey newey_7 newey_p news nl nl_7 nl_9 nl_9_p nl_p nl_p_7 nlcom nlcom_p nlexp2 nlexp2_7 nlexp2a nlexp2a_7 nlexp3 nlexp3_7 nlgom3 nlgom3_7 nlgom4 nlgom4_7 nlinit nllog3 nllog3_7 nllog4 nllog4_7 nlog_rd nlogit nlogit_p nlogitgen nlogittree nlpred no nobreak noi nois noisi noisil noisily note notes notes_dlg nptrend numlabel numlist odbc old_ver olo olog ologi ologi_sw ologit ologit_p ologitp on one onew onewa oneway op_colnm op_comp op_diff op_inv op_str opr opro oprob oprob_sw oprobi oprobi_p oprobit oprobitp opts_exclusive order orthog orthpoly ou out outf outfi outfil outfile outs outsh outshe outshee outsheet ovtest pac pac_7 palette parse parse_dissim pause pca pca_8 pca_display pca_estat pca_p pca_rotate pcamat pchart pchart_7 pchi pchi_7 pcorr pctile pentium pergram pergram_7 permute permute_8 personal peto_st pkcollapse pkcross pkequiv pkexamine pkexamine_7 pkshape pksumm pksumm_7 pl plo plot plugin pnorm pnorm_7 poisgof poiss_lf poiss_sw poisso_p poisson poisson_estat post postclose postfile postutil pperron pr prais prais_e prais_e2 prais_p predict predictnl preserve print pro prob probi probit probit_estat probit_p proc_time procoverlay procrustes procrustes_estat procrustes_p profiler prog progr progra program prop proportion prtest prtesti pwcorr pwd q\\s qby qbys qchi qchi_7 qladder qladder_7 qnorm qnorm_7 qqplot qqplot_7 qreg qreg_c qreg_p qreg_sw qu quadchk quantile quantile_7 que quer query range ranksum ratio rchart rchart_7 rcof recast reclink recode reg reg3 reg3_p regdw regr regre regre_p2 regres regres_p regress regress_estat regriv_p remap ren rena renam rename renpfix repeat replace report reshape restore ret retu retur return rm rmdir robvar roccomp roccomp_7 roccomp_8 rocf_lf rocfit rocfit_8 rocgold rocplot rocplot_7 roctab roctab_7 rolling rologit rologit_p rot rota rotat rotate rotatemat rreg rreg_p ru run runtest rvfplot rvfplot_7 rvpplot rvpplot_7 sa safesum sample sampsi sav save savedresults saveold sc sca scal scala scalar scatter scm_mine sco scob_lf scob_p scobi_sw scobit scor score scoreplot scoreplot_help scree screeplot screeplot_help sdtest sdtesti se search separate seperate serrbar serrbar_7 serset set set_defaults sfrancia sh she shel shell shewhart shewhart_7 signestimationsample signrank signtest simul simul_7 simulate simulate_8 sktest sleep slogit slogit_d2 slogit_p smooth snapspan so sor sort spearman spikeplot spikeplot_7 spikeplt spline_x split sqreg sqreg_p sret sretu sretur sreturn ssc st st_ct st_hc st_hcd st_hcd_sh st_is st_issys st_note st_promo st_set st_show st_smpl st_subid stack statsby statsby_8 stbase stci stci_7 stcox stcox_estat stcox_fr stcox_fr_ll stcox_p stcox_sw stcoxkm stcoxkm_7 stcstat stcurv stcurve stcurve_7 stdes stem stepwise stereg stfill stgen stir stjoin stmc stmh stphplot stphplot_7 stphtest stphtest_7 stptime strate strate_7 streg streg_sw streset sts sts_7 stset stsplit stsum sttocc sttoct stvary stweib su suest suest_8 sum summ summa summar summari summariz summarize sunflower sureg survcurv survsum svar svar_p svmat svy svy_disp svy_dreg svy_est svy_est_7 svy_estat svy_get svy_gnbreg_p svy_head svy_header svy_heckman_p svy_heckprob_p svy_intreg_p svy_ivreg_p svy_logistic_p svy_logit_p svy_mlogit_p svy_nbreg_p svy_ologit_p svy_oprobit_p svy_poisson_p svy_probit_p svy_regress_p svy_sub svy_sub_7 svy_x svy_x_7 svy_x_p svydes svydes_8 svygen svygnbreg svyheckman svyheckprob svyintreg svyintreg_7 svyintrg svyivreg svylc svylog_p svylogit svymarkout svymarkout_8 svymean svymlog svymlogit svynbreg svyolog svyologit svyoprob svyoprobit svyopts svypois svypois_7 svypoisson svyprobit svyprobt svyprop svyprop_7 svyratio svyreg svyreg_p svyregress svyset svyset_7 svyset_8 svytab svytab_7 svytest svytotal sw sw_8 swcnreg swcox swereg swilk swlogis swlogit swologit swoprbt swpois swprobit swqreg swtobit swweib symmetry symmi symplot symplot_7 syntax sysdescribe sysdir sysuse szroeter ta tab tab1 tab2 tab_or tabd tabdi tabdis tabdisp tabi table tabodds tabodds_7 tabstat tabu tabul tabula tabulat tabulate te tempfile tempname tempvar tes test testnl testparm teststd tetrachoric time_it timer tis tob tobi tobit tobit_p tobit_sw token tokeni tokeniz tokenize tostring total translate translator transmap treat_ll treatr_p treatreg trim trnb_cons trnb_mean trpoiss_d2 trunc_ll truncr_p truncreg tsappend tset tsfill tsline tsline_ex tsreport tsrevar tsrline tsset tssmooth tsunab ttest ttesti tut_chk tut_wait tutorial tw tware_st two twoway twoway__fpfit_serset twoway__function_gen twoway__histogram_gen twoway__ipoint_serset twoway__ipoints_serset twoway__kdensity_gen twoway__lfit_serset twoway__normgen_gen twoway__pci_serset twoway__qfit_serset twoway__scatteri_serset twoway__sunflower_gen twoway_ksm_serset ty typ type typeof u|0 unab unabbrev unabcmd update us use uselabel var var_mkcompanion var_p varbasic varfcast vargranger varirf varirf_add varirf_cgraph varirf_create varirf_ctable varirf_describe varirf_dir varirf_drop varirf_erase varirf_graph varirf_ograph varirf_rename varirf_set varirf_table varlist varlmar varnorm varsoc varstable varstable_w varstable_w2 varwle vce vec vec_fevd vec_mkphi vec_p vec_p_w vecirf_create veclmar veclmar_w vecnorm vecnorm_w vecrank vecstable verinst vers versi versio version view viewsource vif vwls wdatetof webdescribe webseek webuse weib1_lf weib2_lf weib_lf weib_lf0 weibhet_glf weibhet_glf_sh weibhet_glfa weibhet_glfa_sh weibhet_gp weibhet_ilf weibhet_ilf_sh weibhet_ilfa weibhet_ilfa_sh weibhet_ip weibu_sw weibul_p weibull weibull_c weibull_s weibullhet wh whelp whi which whil while wilc_st wilcoxon win wind windo window winexec wntestb wntestb_7 wntestq xchart xchart_7 xcorr xcorr_7 xi xi_6 xmlsav xmlsave xmluse xpose xsh xshe xshel xshell xt_iis xt_tis xtab_p xtabond xtbin_p xtclog xtcloglog xtcloglog_8 xtcloglog_d2 xtcloglog_pa_p xtcloglog_re_p xtcnt_p xtcorr xtdata xtdes xtfront_p xtfrontier xtgee xtgee_elink xtgee_estat xtgee_makeivar xtgee_p xtgee_plink xtgls xtgls_p xthaus xthausman xtht_p xthtaylor xtile xtint_p xtintreg xtintreg_8 xtintreg_d2 xtintreg_p xtivp_1 xtivp_2 xtivreg xtline xtline_ex xtlogit xtlogit_8 xtlogit_d2 xtlogit_fe_p xtlogit_pa_p xtlogit_re_p xtmixed xtmixed_estat xtmixed_p xtnb_fe xtnb_lf xtnbreg xtnbreg_pa_p xtnbreg_refe_p xtpcse xtpcse_p xtpois xtpoisson xtpoisson_d2 xtpoisson_pa_p xtpoisson_refe_p xtpred xtprobit xtprobit_8 xtprobit_d2 xtprobit_re_p xtps_fe xtps_lf xtps_ren xtps_ren_8 xtrar_p xtrc xtrc_p xtrchh xtrefe_p xtreg xtreg_be xtreg_fe xtreg_ml xtreg_pa_p xtreg_re xtregar xtrere_p xtset xtsf_ll xtsf_llti xtsum xttab xttest0 xttobit xttobit_8 xttobit_p xttrans yx yxview__barlike_draw yxview_area_draw yxview_bar_draw yxview_dot_draw yxview_dropline_draw yxview_function_draw yxview_iarrow_draw yxview_ilabels_draw yxview_normal_draw yxview_pcarrow_draw yxview_pcbarrow_draw yxview_pccapsym_draw yxview_pcscatter_draw yxview_pcspike_draw yxview_rarea_draw yxview_rbar_draw yxview_rbarm_draw yxview_rcap_draw yxview_rcapsym_draw yxview_rconnected_draw yxview_rline_draw yxview_rscatter_draw yxview_rspike_draw yxview_spike_draw yxview_sunflower_draw zap_s zinb zinb_llf zinb_plf zip zip_llf zip_p zip_plf zt_ct_5 zt_hc_5 zt_hcd_5 zt_is_5 zt_iss_5 zt_sho_5 zt_smp_5 ztbase_5 ztcox_5 ztdes_5 ztereg_5 ztfill_5 ztgen_5 ztir_5 ztjoin_5 ztnb ztnb_p ztp ztp_p zts_5 ztset_5 ztspli_5 ztsum_5 zttoct_5 ztvary_5 ztweib_5',
+ contains: [
+ {
+ className: 'symbol',
+ begin: /`[a-zA-Z0-9_]+'/
+ },
+ {
+ className: 'variable',
+ begin: /\$\{?[a-zA-Z0-9_]+\}?/
+ },
+ {
+ className: 'string',
+ variants: [
+ {begin: '`"[^\r\n]*?"\''},
+ {begin: '"[^\r\n"]*"'}
+ ]
+ },
+
+ {
+ className: 'built_in',
+ variants: [
+ {
+ begin: '\\b(abs|acos|asin|atan|atan2|atanh|ceil|cloglog|comb|cos|digamma|exp|floor|invcloglog|invlogit|ln|lnfact|lnfactorial|lngamma|log|log10|max|min|mod|reldif|round|sign|sin|sqrt|sum|tan|tanh|trigamma|trunc|betaden|Binomial|binorm|binormal|chi2|chi2tail|dgammapda|dgammapdada|dgammapdadx|dgammapdx|dgammapdxdx|F|Fden|Ftail|gammaden|gammap|ibeta|invbinomial|invchi2|invchi2tail|invF|invFtail|invgammap|invibeta|invnchi2|invnFtail|invnibeta|invnorm|invnormal|invttail|nbetaden|nchi2|nFden|nFtail|nibeta|norm|normal|normalden|normd|npnchi2|tden|ttail|uniform|abbrev|char|index|indexnot|length|lower|ltrim|match|plural|proper|real|regexm|regexr|regexs|reverse|rtrim|string|strlen|strlower|strltrim|strmatch|strofreal|strpos|strproper|strreverse|strrtrim|strtrim|strupper|subinstr|subinword|substr|trim|upper|word|wordcount|_caller|autocode|byteorder|chop|clip|cond|e|epsdouble|epsfloat|group|inlist|inrange|irecode|matrix|maxbyte|maxdouble|maxfloat|maxint|maxlong|mi|minbyte|mindouble|minfloat|minint|minlong|missing|r|recode|replay|return|s|scalar|d|date|day|dow|doy|halfyear|mdy|month|quarter|week|year|d|daily|dofd|dofh|dofm|dofq|dofw|dofy|h|halfyearly|hofd|m|mofd|monthly|q|qofd|quarterly|tin|twithin|w|weekly|wofd|y|yearly|yh|ym|yofd|yq|yw|cholesky|colnumb|colsof|corr|det|diag|diag0cnt|el|get|hadamard|I|inv|invsym|issym|issymmetric|J|matmissing|matuniform|mreldif|nullmat|rownumb|rowsof|sweep|syminv|trace|vec|vecdiag)(?=\\(|$)'
+ }
+ ]
+ },
+
+ hljs.COMMENT('^[ \t]*\\*.*$', false),
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE
+ ]
+ };
+});
+
+hljs.registerLanguage("step21",
+/*
+Language: STEP Part 21
+Contributors: Adam Joseph Cook <adam.joseph.cook@gmail.com>
+Description: Syntax highlighter for STEP Part 21 files (ISO 10303-21).
+*/
+
+function(hljs) {
+ var STEP21_IDENT_RE = '[A-Z_][A-Z0-9_.]*';
+ var STEP21_KEYWORDS = {
+ keyword: 'HEADER ENDSEC DATA'
+ };
+ var STEP21_START = {
+ className: 'meta',
+ begin: 'ISO-10303-21;',
+ relevance: 10
+ };
+ var STEP21_CLOSE = {
+ className: 'meta',
+ begin: 'END-ISO-10303-21;',
+ relevance: 10
+ };
+
+ return {
+ aliases: ['p21', 'step', 'stp'],
+ case_insensitive: true, // STEP 21 is case insensitive in theory, in practice all non-comments are capitalized.
+ lexemes: STEP21_IDENT_RE,
+ keywords: STEP21_KEYWORDS,
+ contains: [
+ STEP21_START,
+ STEP21_CLOSE,
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.COMMENT('/\\*\\*!', '\\*/'),
+ hljs.C_NUMBER_MODE,
+ hljs.inherit(hljs.APOS_STRING_MODE, {illegal: null}),
+ hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null}),
+ {
+ className: 'string',
+ begin: "'", end: "'"
+ },
+ {
+ className: 'symbol',
+ variants: [
+ {
+ begin: '#', end: '\\d+',
+ illegal: '\\W'
+ }
+ ]
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("stylus",
+/*
+Language: Stylus
+Author: Bryant Williams <b.n.williams@gmail.com>
+Description: Stylus (https://github.com/LearnBoost/stylus/)
+Category: css
+*/
+
+function(hljs) {
+
+ var VARIABLE = {
+ className: 'variable',
+ begin: '\\$' + hljs.IDENT_RE
+ };
+
+ var HEX_COLOR = {
+ className: 'number',
+ begin: '#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})'
+ };
+
+ var AT_KEYWORDS = [
+ 'charset',
+ 'css',
+ 'debug',
+ 'extend',
+ 'font-face',
+ 'for',
+ 'import',
+ 'include',
+ 'media',
+ 'mixin',
+ 'page',
+ 'warn',
+ 'while'
+ ];
+
+ var PSEUDO_SELECTORS = [
+ 'after',
+ 'before',
+ 'first-letter',
+ 'first-line',
+ 'active',
+ 'first-child',
+ 'focus',
+ 'hover',
+ 'lang',
+ 'link',
+ 'visited'
+ ];
+
+ var TAGS = [
+ 'a',
+ 'abbr',
+ 'address',
+ 'article',
+ 'aside',
+ 'audio',
+ 'b',
+ 'blockquote',
+ 'body',
+ 'button',
+ 'canvas',
+ 'caption',
+ 'cite',
+ 'code',
+ 'dd',
+ 'del',
+ 'details',
+ 'dfn',
+ 'div',
+ 'dl',
+ 'dt',
+ 'em',
+ 'fieldset',
+ 'figcaption',
+ 'figure',
+ 'footer',
+ 'form',
+ 'h1',
+ 'h2',
+ 'h3',
+ 'h4',
+ 'h5',
+ 'h6',
+ 'header',
+ 'hgroup',
+ 'html',
+ 'i',
+ 'iframe',
+ 'img',
+ 'input',
+ 'ins',
+ 'kbd',
+ 'label',
+ 'legend',
+ 'li',
+ 'mark',
+ 'menu',
+ 'nav',
+ 'object',
+ 'ol',
+ 'p',
+ 'q',
+ 'quote',
+ 'samp',
+ 'section',
+ 'span',
+ 'strong',
+ 'summary',
+ 'sup',
+ 'table',
+ 'tbody',
+ 'td',
+ 'textarea',
+ 'tfoot',
+ 'th',
+ 'thead',
+ 'time',
+ 'tr',
+ 'ul',
+ 'var',
+ 'video'
+ ];
+
+ var TAG_END = '[\\.\\s\\n\\[\\:,]';
+
+ var ATTRIBUTES = [
+ 'align-content',
+ 'align-items',
+ 'align-self',
+ 'animation',
+ 'animation-delay',
+ 'animation-direction',
+ 'animation-duration',
+ 'animation-fill-mode',
+ 'animation-iteration-count',
+ 'animation-name',
+ 'animation-play-state',
+ 'animation-timing-function',
+ 'auto',
+ 'backface-visibility',
+ 'background',
+ 'background-attachment',
+ 'background-clip',
+ 'background-color',
+ 'background-image',
+ 'background-origin',
+ 'background-position',
+ 'background-repeat',
+ 'background-size',
+ 'border',
+ 'border-bottom',
+ 'border-bottom-color',
+ 'border-bottom-left-radius',
+ 'border-bottom-right-radius',
+ 'border-bottom-style',
+ 'border-bottom-width',
+ 'border-collapse',
+ 'border-color',
+ 'border-image',
+ 'border-image-outset',
+ 'border-image-repeat',
+ 'border-image-slice',
+ 'border-image-source',
+ 'border-image-width',
+ 'border-left',
+ 'border-left-color',
+ 'border-left-style',
+ 'border-left-width',
+ 'border-radius',
+ 'border-right',
+ 'border-right-color',
+ 'border-right-style',
+ 'border-right-width',
+ 'border-spacing',
+ 'border-style',
+ 'border-top',
+ 'border-top-color',
+ 'border-top-left-radius',
+ 'border-top-right-radius',
+ 'border-top-style',
+ 'border-top-width',
+ 'border-width',
+ 'bottom',
+ 'box-decoration-break',
+ 'box-shadow',
+ 'box-sizing',
+ 'break-after',
+ 'break-before',
+ 'break-inside',
+ 'caption-side',
+ 'clear',
+ 'clip',
+ 'clip-path',
+ 'color',
+ 'column-count',
+ 'column-fill',
+ 'column-gap',
+ 'column-rule',
+ 'column-rule-color',
+ 'column-rule-style',
+ 'column-rule-width',
+ 'column-span',
+ 'column-width',
+ 'columns',
+ 'content',
+ 'counter-increment',
+ 'counter-reset',
+ 'cursor',
+ 'direction',
+ 'display',
+ 'empty-cells',
+ 'filter',
+ 'flex',
+ 'flex-basis',
+ 'flex-direction',
+ 'flex-flow',
+ 'flex-grow',
+ 'flex-shrink',
+ 'flex-wrap',
+ 'float',
+ 'font',
+ 'font-family',
+ 'font-feature-settings',
+ 'font-kerning',
+ 'font-language-override',
+ 'font-size',
+ 'font-size-adjust',
+ 'font-stretch',
+ 'font-style',
+ 'font-variant',
+ 'font-variant-ligatures',
+ 'font-weight',
+ 'height',
+ 'hyphens',
+ 'icon',
+ 'image-orientation',
+ 'image-rendering',
+ 'image-resolution',
+ 'ime-mode',
+ 'inherit',
+ 'initial',
+ 'justify-content',
+ 'left',
+ 'letter-spacing',
+ 'line-height',
+ 'list-style',
+ 'list-style-image',
+ 'list-style-position',
+ 'list-style-type',
+ 'margin',
+ 'margin-bottom',
+ 'margin-left',
+ 'margin-right',
+ 'margin-top',
+ 'marks',
+ 'mask',
+ 'max-height',
+ 'max-width',
+ 'min-height',
+ 'min-width',
+ 'nav-down',
+ 'nav-index',
+ 'nav-left',
+ 'nav-right',
+ 'nav-up',
+ 'none',
+ 'normal',
+ 'object-fit',
+ 'object-position',
+ 'opacity',
+ 'order',
+ 'orphans',
+ 'outline',
+ 'outline-color',
+ 'outline-offset',
+ 'outline-style',
+ 'outline-width',
+ 'overflow',
+ 'overflow-wrap',
+ 'overflow-x',
+ 'overflow-y',
+ 'padding',
+ 'padding-bottom',
+ 'padding-left',
+ 'padding-right',
+ 'padding-top',
+ 'page-break-after',
+ 'page-break-before',
+ 'page-break-inside',
+ 'perspective',
+ 'perspective-origin',
+ 'pointer-events',
+ 'position',
+ 'quotes',
+ 'resize',
+ 'right',
+ 'tab-size',
+ 'table-layout',
+ 'text-align',
+ 'text-align-last',
+ 'text-decoration',
+ 'text-decoration-color',
+ 'text-decoration-line',
+ 'text-decoration-style',
+ 'text-indent',
+ 'text-overflow',
+ 'text-rendering',
+ 'text-shadow',
+ 'text-transform',
+ 'text-underline-position',
+ 'top',
+ 'transform',
+ 'transform-origin',
+ 'transform-style',
+ 'transition',
+ 'transition-delay',
+ 'transition-duration',
+ 'transition-property',
+ 'transition-timing-function',
+ 'unicode-bidi',
+ 'vertical-align',
+ 'visibility',
+ 'white-space',
+ 'widows',
+ 'width',
+ 'word-break',
+ 'word-spacing',
+ 'word-wrap',
+ 'z-index'
+ ];
+
+ // illegals
+ var ILLEGAL = [
+ '\\?',
+ '(\\bReturn\\b)', // monkey
+ '(\\bEnd\\b)', // monkey
+ '(\\bend\\b)', // vbscript
+ '(\\bdef\\b)', // gradle
+ ';', // a whole lot of languages
+ '#\\s', // markdown
+ '\\*\\s', // markdown
+ '===\\s', // markdown
+ '\\|',
+ '%', // prolog
+ ];
+
+ return {
+ aliases: ['styl'],
+ case_insensitive: false,
+ keywords: 'if else for in',
+ illegal: '(' + ILLEGAL.join('|') + ')',
+ contains: [
+
+ // strings
+ hljs.QUOTE_STRING_MODE,
+ hljs.APOS_STRING_MODE,
+
+ // comments
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+
+ // hex colors
+ HEX_COLOR,
+
+ // class tag
+ {
+ begin: '\\.[a-zA-Z][a-zA-Z0-9_-]*' + TAG_END,
+ returnBegin: true,
+ contains: [
+ {className: 'selector-class', begin: '\\.[a-zA-Z][a-zA-Z0-9_-]*'}
+ ]
+ },
+
+ // id tag
+ {
+ begin: '\\#[a-zA-Z][a-zA-Z0-9_-]*' + TAG_END,
+ returnBegin: true,
+ contains: [
+ {className: 'selector-id', begin: '\\#[a-zA-Z][a-zA-Z0-9_-]*'}
+ ]
+ },
+
+ // tags
+ {
+ begin: '\\b(' + TAGS.join('|') + ')' + TAG_END,
+ returnBegin: true,
+ contains: [
+ {className: 'selector-tag', begin: '\\b[a-zA-Z][a-zA-Z0-9_-]*'}
+ ]
+ },
+
+ // psuedo selectors
+ {
+ begin: '&?:?:\\b(' + PSEUDO_SELECTORS.join('|') + ')' + TAG_END
+ },
+
+ // @ keywords
+ {
+ begin: '\@(' + AT_KEYWORDS.join('|') + ')\\b'
+ },
+
+ // variables
+ VARIABLE,
+
+ // dimension
+ hljs.CSS_NUMBER_MODE,
+
+ // number
+ hljs.NUMBER_MODE,
+
+ // functions
+ // - only from beginning of line + whitespace
+ {
+ className: 'function',
+ begin: '^[a-zA-Z][a-zA-Z0-9_\-]*\\(.*\\)',
+ illegal: '[\\n]',
+ returnBegin: true,
+ contains: [
+ {className: 'title', begin: '\\b[a-zA-Z][a-zA-Z0-9_\-]*'},
+ {
+ className: 'params',
+ begin: /\(/,
+ end: /\)/,
+ contains: [
+ HEX_COLOR,
+ VARIABLE,
+ hljs.APOS_STRING_MODE,
+ hljs.CSS_NUMBER_MODE,
+ hljs.NUMBER_MODE,
+ hljs.QUOTE_STRING_MODE
+ ]
+ }
+ ]
+ },
+
+ // attributes
+ // - only from beginning of line + whitespace
+ // - must have whitespace after it
+ {
+ className: 'attribute',
+ begin: '\\b(' + ATTRIBUTES.reverse().join('|') + ')\\b',
+ starts: {
+ // value container
+ end: /;|$/,
+ contains: [
+ HEX_COLOR,
+ VARIABLE,
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.CSS_NUMBER_MODE,
+ hljs.NUMBER_MODE,
+ hljs.C_BLOCK_COMMENT_MODE
+ ],
+ illegal: /\./,
+ relevance: 0
+ }
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("swift",
+/*
+Language: Swift
+Author: Chris Eidhof <chris@eidhof.nl>
+Contributors: Nate Cook <natecook@gmail.com>
+Category: system
+*/
+
+
+function(hljs) {
+ var SWIFT_KEYWORDS = {
+ keyword: '__COLUMN__ __FILE__ __FUNCTION__ __LINE__ as as! as? associativity ' +
+ 'break case catch class continue convenience default defer deinit didSet do ' +
+ 'dynamic dynamicType else enum extension fallthrough false final for func ' +
+ 'get guard if import in indirect infix init inout internal is lazy left let ' +
+ 'mutating nil none nonmutating operator optional override postfix precedence ' +
+ 'prefix private protocol Protocol public repeat required rethrows return ' +
+ 'right self Self set static struct subscript super switch throw throws true ' +
+ 'try try! try? Type typealias unowned var weak where while willSet',
+ literal: 'true false nil',
+ built_in: 'abs advance alignof alignofValue anyGenerator assert assertionFailure ' +
+ 'bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC ' +
+ 'bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros ' +
+ 'debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords ' +
+ 'enumerate equal fatalError filter find getBridgedObjectiveCType getVaList ' +
+ 'indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC ' +
+ 'isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare ' +
+ 'map max maxElement min minElement numericCast overlaps partition posix ' +
+ 'precondition preconditionFailure print println quickSort readLine reduce reflect ' +
+ 'reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split ' +
+ 'startsWith stride strideof strideofValue swap toString transcode ' +
+ 'underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap ' +
+ 'unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer ' +
+ 'withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers ' +
+ 'withUnsafePointer withUnsafePointers withVaList zip'
+ };
+
+ var TYPE = {
+ className: 'type',
+ begin: '\\b[A-Z][\\w\']*',
+ relevance: 0
+ };
+ var BLOCK_COMMENT = hljs.COMMENT(
+ '/\\*',
+ '\\*/',
+ {
+ contains: ['self']
+ }
+ );
+ var SUBST = {
+ className: 'subst',
+ begin: /\\\(/, end: '\\)',
+ keywords: SWIFT_KEYWORDS,
+ contains: [] // assigned later
+ };
+ var NUMBERS = {
+ className: 'number',
+ begin: '\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b',
+ relevance: 0
+ };
+ var QUOTE_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, {
+ contains: [SUBST, hljs.BACKSLASH_ESCAPE]
+ });
+ SUBST.contains = [NUMBERS];
+
+ return {
+ keywords: SWIFT_KEYWORDS,
+ contains: [
+ QUOTE_STRING_MODE,
+ hljs.C_LINE_COMMENT_MODE,
+ BLOCK_COMMENT,
+ TYPE,
+ NUMBERS,
+ {
+ className: 'function',
+ beginKeywords: 'func', end: '{', excludeEnd: true,
+ contains: [
+ hljs.inherit(hljs.TITLE_MODE, {
+ begin: /[A-Za-z$_][0-9A-Za-z$_]*/
+ }),
+ {
+ begin: /</, end: />/
+ },
+ {
+ className: 'params',
+ begin: /\(/, end: /\)/, endsParent: true,
+ keywords: SWIFT_KEYWORDS,
+ contains: [
+ 'self',
+ NUMBERS,
+ QUOTE_STRING_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ {begin: ':'} // relevance booster
+ ],
+ illegal: /["']/
+ }
+ ],
+ illegal: /\[|%/
+ },
+ {
+ className: 'class',
+ beginKeywords: 'struct protocol class extension enum',
+ keywords: SWIFT_KEYWORDS,
+ end: '\\{',
+ excludeEnd: true,
+ contains: [
+ hljs.inherit(hljs.TITLE_MODE, {begin: /[A-Za-z$_][0-9A-Za-z$_]*/})
+ ]
+ },
+ {
+ className: 'meta', // @attributes
+ begin: '(@warn_unused_result|@exported|@lazy|@noescape|' +
+ '@NSCopying|@NSManaged|@objc|@convention|@required|' +
+ '@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|' +
+ '@infix|@prefix|@postfix|@autoclosure|@testable|@available|' +
+ '@nonobjc|@NSApplicationMain|@UIApplicationMain)'
+
+ },
+ {
+ beginKeywords: 'import', end: /$/,
+ contains: [hljs.C_LINE_COMMENT_MODE, BLOCK_COMMENT]
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("taggerscript",
+/*
+Language: Tagger Script
+Author: Philipp Wolfer <ph.wolfer@gmail.com>
+Description: Syntax Highlighting for the Tagger Script as used by MusicBrainz Picard.
+ */
+function(hljs) {
+
+ var COMMENT = {
+ className: 'comment',
+ begin: /\$noop\(/,
+ end: /\)/,
+ contains: [{
+ begin: /\(/,
+ end: /\)/,
+ contains: ['self', {
+ begin: /\\./
+ }]
+ }],
+ relevance: 10
+ };
+
+ var FUNCTION = {
+ className: 'keyword',
+ begin: /\$(?!noop)[a-zA-Z][_a-zA-Z0-9]*/,
+ end: /\(/,
+ excludeEnd: true
+ };
+
+ var VARIABLE = {
+ className: 'variable',
+ begin: /%[_a-zA-Z0-9:]*/,
+ end: '%'
+ };
+
+ var ESCAPE_SEQUENCE = {
+ className: 'symbol',
+ begin: /\\./
+ };
+
+ return {
+ contains: [
+ COMMENT,
+ FUNCTION,
+ VARIABLE,
+ ESCAPE_SEQUENCE
+ ]
+ };
+});
+
+hljs.registerLanguage("yaml",
+/*
+Language: YAML
+Author: Stefan Wienert <stwienert@gmail.com>
+Requires: ruby.js
+Description: YAML (Yet Another Markdown Language)
+Category: config
+*/
+function(hljs) {
+ var LITERALS = {literal: '{ } true false yes no Yes No True False null'};
+
+ var keyPrefix = '^[ \\-]*';
+ var keyName = '[a-zA-Z_][\\w\\-]*';
+ var KEY = {
+ className: 'attr',
+ variants: [
+ { begin: keyPrefix + keyName + ":"},
+ { begin: keyPrefix + '"' + keyName + '"' + ":"},
+ { begin: keyPrefix + "'" + keyName + "'" + ":"}
+ ]
+ };
+
+ var TEMPLATE_VARIABLES = {
+ className: 'template-variable',
+ variants: [
+ { begin: '\{\{', end: '\}\}' }, // jinja templates Ansible
+ { begin: '%\{', end: '\}' } // Ruby i18n
+ ]
+ };
+ var STRING = {
+ className: 'string',
+ relevance: 0,
+ variants: [
+ {begin: /'/, end: /'/},
+ {begin: /"/, end: /"/}
+ ],
+ contains: [
+ hljs.BACKSLASH_ESCAPE,
+ TEMPLATE_VARIABLES
+ ]
+ };
+
+ return {
+ case_insensitive: true,
+ aliases: ['yml', 'YAML', 'yaml'],
+ contains: [
+ KEY,
+ {
+ className: 'meta',
+ begin: '^---\s*$',
+ relevance: 10
+ },
+ { // multi line string
+ className: 'string',
+ begin: '[\\|>] *$',
+ returnEnd: true,
+ contains: STRING.contains,
+ // very simple termination: next hash key
+ end: KEY.variants[0].begin
+ },
+ { // Ruby/Rails erb
+ begin: '<%[%=-]?', end: '[%-]?%>',
+ subLanguage: 'ruby',
+ excludeBegin: true,
+ excludeEnd: true,
+ relevance: 0
+ },
+ { // data type
+ className: 'type',
+ begin: '!!' + hljs.UNDERSCORE_IDENT_RE,
+ },
+ { // fragment id &ref
+ className: 'meta',
+ begin: '&' + hljs.UNDERSCORE_IDENT_RE + '$',
+ },
+ { // fragment reference *ref
+ className: 'meta',
+ begin: '\\*' + hljs.UNDERSCORE_IDENT_RE + '$'
+ },
+ { // array listing
+ className: 'bullet',
+ begin: '^ *-',
+ relevance: 0
+ },
+ STRING,
+ hljs.HASH_COMMENT_MODE,
+ hljs.C_NUMBER_MODE
+ ],
+ keywords: LITERALS
+ };
+});
+
+hljs.registerLanguage("tap",
+/*
+Language: Test Anything Protocol
+Requires: yaml.js
+Author: Sergey Bronnikov <sergeyb@bronevichok.ru>
+Website: https://bronevichok.ru/
+*/
+
+function(hljs) {
+ return {
+ case_insensitive: true,
+ contains: [
+ hljs.HASH_COMMENT_MODE,
+ // version of format and total amount of testcases
+ {
+ className: 'meta',
+ variants: [
+ { begin: '^TAP version (\\d+)$' },
+ { begin: '^1\\.\\.(\\d+)$' }
+ ],
+ },
+ // YAML block
+ {
+ begin: '(\s+)?---$', end: '\\.\\.\\.$',
+ subLanguage: 'yaml',
+ relevance: 0
+ },
+ // testcase number
+ {
+ className: 'number',
+ begin: ' (\\d+) '
+ },
+ // testcase status and description
+ {
+ className: 'symbol',
+ variants: [
+ { begin: '^ok' },
+ { begin: '^not ok' }
+ ],
+ },
+ ]
+ };
+});
+
+hljs.registerLanguage("tcl",
+/*
+Language: Tcl
+Author: Radek Liska <radekliska@gmail.com>
+*/
+
+function(hljs) {
+ return {
+ aliases: ['tk'],
+ keywords: 'after append apply array auto_execok auto_import auto_load auto_mkindex ' +
+ 'auto_mkindex_old auto_qualify auto_reset bgerror binary break catch cd chan clock ' +
+ 'close concat continue dde dict encoding eof error eval exec exit expr fblocked ' +
+ 'fconfigure fcopy file fileevent filename flush for foreach format gets glob global ' +
+ 'history http if incr info interp join lappend|10 lassign|10 lindex|10 linsert|10 list ' +
+ 'llength|10 load lrange|10 lrepeat|10 lreplace|10 lreverse|10 lsearch|10 lset|10 lsort|10 '+
+ 'mathfunc mathop memory msgcat namespace open package parray pid pkg::create pkg_mkIndex '+
+ 'platform platform::shell proc puts pwd read refchan regexp registry regsub|10 rename '+
+ 'return safe scan seek set socket source split string subst switch tcl_endOfWord '+
+ 'tcl_findLibrary tcl_startOfNextWord tcl_startOfPreviousWord tcl_wordBreakAfter '+
+ 'tcl_wordBreakBefore tcltest tclvars tell time tm trace unknown unload unset update '+
+ 'uplevel upvar variable vwait while',
+ contains: [
+ hljs.COMMENT(';[ \\t]*#', '$'),
+ hljs.COMMENT('^[ \\t]*#', '$'),
+ {
+ beginKeywords: 'proc',
+ end: '[\\{]',
+ excludeEnd: true,
+ contains: [
+ {
+ className: 'title',
+ begin: '[ \\t\\n\\r]+(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*',
+ end: '[ \\t\\n\\r]',
+ endsWithParent: true,
+ excludeEnd: true
+ }
+ ]
+ },
+ {
+ excludeEnd: true,
+ variants: [
+ {
+ begin: '\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*\\(([a-zA-Z0-9_])*\\)',
+ end: '[^a-zA-Z0-9_\\}\\$]'
+ },
+ {
+ begin: '\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*',
+ end: '(\\))?[^a-zA-Z0-9_\\}\\$]'
+ }
+ ]
+ },
+ {
+ className: 'string',
+ contains: [hljs.BACKSLASH_ESCAPE],
+ variants: [
+ hljs.inherit(hljs.APOS_STRING_MODE, {illegal: null}),
+ hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null})
+ ]
+ },
+ {
+ className: 'number',
+ variants: [hljs.BINARY_NUMBER_MODE, hljs.C_NUMBER_MODE]
+ }
+ ]
+ }
+});
+
+hljs.registerLanguage("tex",
+/*
+Language: TeX
+Author: Vladimir Moskva <vladmos@gmail.com>
+Website: http://fulc.ru/
+Category: markup
+*/
+
+function(hljs) {
+ var COMMAND = {
+ className: 'tag',
+ begin: /\\/,
+ relevance: 0,
+ contains: [
+ {
+ className: 'name',
+ variants: [
+ {begin: /[a-zA-Zа-яА-я]+[*]?/},
+ {begin: /[^a-zA-Zа-яА-я0-9]/}
+ ],
+ starts: {
+ endsWithParent: true,
+ relevance: 0,
+ contains: [
+ {
+ className: 'string', // because it looks like attributes in HTML tags
+ variants: [
+ {begin: /\[/, end: /\]/},
+ {begin: /\{/, end: /\}/}
+ ]
+ },
+ {
+ begin: /\s*=\s*/, endsWithParent: true,
+ relevance: 0,
+ contains: [
+ {
+ className: 'number',
+ begin: /-?\d*\.?\d+(pt|pc|mm|cm|in|dd|cc|ex|em)?/
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ };
+
+ return {
+ contains: [
+ COMMAND,
+ {
+ className: 'formula',
+ contains: [COMMAND],
+ relevance: 0,
+ variants: [
+ {begin: /\$\$/, end: /\$\$/},
+ {begin: /\$/, end: /\$/}
+ ]
+ },
+ hljs.COMMENT(
+ '%',
+ '$',
+ {
+ relevance: 0
+ }
+ )
+ ]
+ };
+});
+
+hljs.registerLanguage("thrift",
+/*
+Language: Thrift
+Author: Oleg Efimov <efimovov@gmail.com>
+Description: Thrift message definition format
+Category: protocols
+*/
+
+function(hljs) {
+ var BUILT_IN_TYPES = 'bool byte i16 i32 i64 double string binary';
+ return {
+ keywords: {
+ keyword:
+ 'namespace const typedef struct enum service exception void oneway set list map required optional',
+ built_in:
+ BUILT_IN_TYPES,
+ literal:
+ 'true false'
+ },
+ contains: [
+ hljs.QUOTE_STRING_MODE,
+ hljs.NUMBER_MODE,
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ {
+ className: 'class',
+ beginKeywords: 'struct enum service exception', end: /\{/,
+ illegal: /\n/,
+ contains: [
+ hljs.inherit(hljs.TITLE_MODE, {
+ starts: {endsWithParent: true, excludeEnd: true} // hack: eating everything after the first title
+ })
+ ]
+ },
+ {
+ begin: '\\b(set|list|map)\\s*<', end: '>',
+ keywords: BUILT_IN_TYPES,
+ contains: ['self']
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("tp",
+/*
+Language: TP
+Author: Jay Strybis <jay.strybis@gmail.com>
+Description: FANUC TP programming language (TPP).
+*/
+
+
+function(hljs) {
+ var TPID = {
+ className: 'number',
+ begin: '[1-9][0-9]*', /* no leading zeros */
+ relevance: 0
+ };
+ var TPLABEL = {
+ className: 'symbol',
+ begin: ':[^\\]]+'
+ };
+ var TPDATA = {
+ className: 'built_in',
+ begin: '(AR|P|PAYLOAD|PR|R|SR|RSR|LBL|VR|UALM|MESSAGE|UTOOL|UFRAME|TIMER|\
+ TIMER_OVERFLOW|JOINT_MAX_SPEED|RESUME_PROG|DIAG_REC)\\[', end: '\\]',
+ contains: [
+ 'self',
+ TPID,
+ TPLABEL
+ ]
+ };
+ var TPIO = {
+ className: 'built_in',
+ begin: '(AI|AO|DI|DO|F|RI|RO|UI|UO|GI|GO|SI|SO)\\[', end: '\\]',
+ contains: [
+ 'self',
+ TPID,
+ hljs.QUOTE_STRING_MODE, /* for pos section at bottom */
+ TPLABEL
+ ]
+ };
+
+ return {
+ keywords: {
+ keyword:
+ 'ABORT ACC ADJUST AND AP_LD BREAK CALL CNT COL CONDITION CONFIG DA DB ' +
+ 'DIV DETECT ELSE END ENDFOR ERR_NUM ERROR_PROG FINE FOR GP GUARD INC ' +
+ 'IF JMP LINEAR_MAX_SPEED LOCK MOD MONITOR OFFSET Offset OR OVERRIDE ' +
+ 'PAUSE PREG PTH RT_LD RUN SELECT SKIP Skip TA TB TO TOOL_OFFSET ' +
+ 'Tool_Offset UF UT UFRAME_NUM UTOOL_NUM UNLOCK WAIT X Y Z W P R STRLEN ' +
+ 'SUBSTR FINDSTR VOFFSET PROG ATTR MN POS',
+ literal:
+ 'ON OFF max_speed LPOS JPOS ENABLE DISABLE START STOP RESET'
+ },
+ contains: [
+ TPDATA,
+ TPIO,
+ {
+ className: 'keyword',
+ begin: '/(PROG|ATTR|MN|POS|END)\\b'
+ },
+ {
+ /* this is for cases like ,CALL */
+ className: 'keyword',
+ begin: '(CALL|RUN|POINT_LOGIC|LBL)\\b'
+ },
+ {
+ /* this is for cases like CNT100 where the default lexemes do not
+ * separate the keyword and the number */
+ className: 'keyword',
+ begin: '\\b(ACC|CNT|Skip|Offset|PSPD|RT_LD|AP_LD|Tool_Offset)'
+ },
+ {
+ /* to catch numbers that do not have a word boundary on the left */
+ className: 'number',
+ begin: '\\d+(sec|msec|mm/sec|cm/min|inch/min|deg/sec|mm|in|cm)?\\b',
+ relevance: 0
+ },
+ hljs.COMMENT('//', '[;$]'),
+ hljs.COMMENT('!', '[;$]'),
+ hljs.COMMENT('--eg:', '$'),
+ hljs.QUOTE_STRING_MODE,
+ {
+ className: 'string',
+ begin: '\'', end: '\''
+ },
+ hljs.C_NUMBER_MODE,
+ {
+ className: 'variable',
+ begin: '\\$[A-Za-z0-9_]+'
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("twig",
+/*
+Language: Twig
+Requires: xml.js
+Author: Luke Holder <lukemh@gmail.com>
+Description: Twig is a templating language for PHP
+Category: template
+*/
+
+function(hljs) {
+ var PARAMS = {
+ className: 'params',
+ begin: '\\(', end: '\\)'
+ };
+
+ var FUNCTION_NAMES = 'attribute block constant cycle date dump include ' +
+ 'max min parent random range source template_from_string';
+
+ var FUNCTIONS = {
+ beginKeywords: FUNCTION_NAMES,
+ keywords: {name: FUNCTION_NAMES},
+ relevance: 0,
+ contains: [
+ PARAMS
+ ]
+ };
+
+ var FILTER = {
+ begin: /\|[A-Za-z_]+:?/,
+ keywords:
+ 'abs batch capitalize convert_encoding date date_modify default ' +
+ 'escape first format join json_encode keys last length lower ' +
+ 'merge nl2br number_format raw replace reverse round slice sort split ' +
+ 'striptags title trim upper url_encode',
+ contains: [
+ FUNCTIONS
+ ]
+ };
+
+ var TAGS = 'autoescape block do embed extends filter flush for ' +
+ 'if import include macro sandbox set spaceless use verbatim';
+
+ TAGS = TAGS + ' ' + TAGS.split(' ').map(function(t){return 'end' + t}).join(' ');
+
+ return {
+ aliases: ['craftcms'],
+ case_insensitive: true,
+ subLanguage: 'xml',
+ contains: [
+ hljs.COMMENT(/\{#/, /#}/),
+ {
+ className: 'template-tag',
+ begin: /\{%/, end: /%}/,
+ contains: [
+ {
+ className: 'name',
+ begin: /\w+/,
+ keywords: TAGS,
+ starts: {
+ endsWithParent: true,
+ contains: [FILTER, FUNCTIONS],
+ relevance: 0
+ }
+ }
+ ]
+ },
+ {
+ className: 'template-variable',
+ begin: /\{\{/, end: /}}/,
+ contains: ['self', FILTER, FUNCTIONS]
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("typescript",
+/*
+Language: TypeScript
+Author: Panu Horsmalahti <panu.horsmalahti@iki.fi>
+Description: TypeScript is a strict superset of JavaScript
+Category: scripting
+*/
+
+function(hljs) {
+ var KEYWORDS = {
+ keyword:
+ 'in if for while finally var new function do return void else break catch ' +
+ 'instanceof with throw case default try this switch continue typeof delete ' +
+ 'let yield const class public private protected get set super ' +
+ 'static implements enum export import declare type namespace abstract',
+ literal:
+ 'true false null undefined NaN Infinity',
+ built_in:
+ 'eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent ' +
+ 'encodeURI encodeURIComponent escape unescape Object Function Boolean Error ' +
+ 'EvalError InternalError RangeError ReferenceError StopIteration SyntaxError ' +
+ 'TypeError URIError Number Math Date String RegExp Array Float32Array ' +
+ 'Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array ' +
+ 'Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require ' +
+ 'module console window document any number boolean string void'
+ };
+
+ return {
+ aliases: ['ts'],
+ keywords: KEYWORDS,
+ contains: [
+ {
+ className: 'meta',
+ begin: /^\s*['"]use strict['"]/
+ },
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ { // template string
+ className: 'string',
+ begin: '`', end: '`',
+ contains: [
+ hljs.BACKSLASH_ESCAPE,
+ {
+ className: 'subst',
+ begin: '\\$\\{', end: '\\}'
+ }
+ ]
+ },
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ {
+ className: 'number',
+ variants: [
+ { begin: '\\b(0[bB][01]+)' },
+ { begin: '\\b(0[oO][0-7]+)' },
+ { begin: hljs.C_NUMBER_RE }
+ ],
+ relevance: 0
+ },
+ { // "value" container
+ begin: '(' + hljs.RE_STARTERS_RE + '|\\b(case|return|throw)\\b)\\s*',
+ keywords: 'return throw case',
+ contains: [
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.REGEXP_MODE
+ ],
+ relevance: 0
+ },
+ {
+ className: 'function',
+ begin: 'function', end: /[\{;]/, excludeEnd: true,
+ keywords: KEYWORDS,
+ contains: [
+ 'self',
+ hljs.inherit(hljs.TITLE_MODE, {begin: /[A-Za-z$_][0-9A-Za-z$_]*/}),
+ {
+ className: 'params',
+ begin: /\(/, end: /\)/,
+ excludeBegin: true,
+ excludeEnd: true,
+ keywords: KEYWORDS,
+ contains: [
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE
+ ],
+ illegal: /["'\(]/
+ }
+ ],
+ illegal: /%/,
+ relevance: 0 // () => {} is more typical in TypeScript
+ },
+ {
+ beginKeywords: 'constructor', end: /\{/, excludeEnd: true
+ },
+ { // prevent references like module.id from being higlighted as module definitions
+ begin: /module\./,
+ keywords: {built_in: 'module'},
+ relevance: 0
+ },
+ {
+ beginKeywords: 'module', end: /\{/, excludeEnd: true
+ },
+ {
+ beginKeywords: 'interface', end: /\{/, excludeEnd: true,
+ keywords: 'interface extends'
+ },
+ {
+ begin: /\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`
+ },
+ {
+ begin: '\\.' + hljs.IDENT_RE, relevance: 0 // hack: prevents detection of keywords after dots
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("vala",
+/*
+Language: Vala
+Author: Antono Vasiljev <antono.vasiljev@gmail.com>
+Description: Vala is a new programming language that aims to bring modern programming language features to GNOME developers without imposing any additional runtime requirements and without using a different ABI compared to applications and libraries written in C.
+*/
+
+function(hljs) {
+ return {
+ keywords: {
+ keyword:
+ // Value types
+ 'char uchar unichar int uint long ulong short ushort int8 int16 int32 int64 uint8 ' +
+ 'uint16 uint32 uint64 float double bool struct enum string void ' +
+ // Reference types
+ 'weak unowned owned ' +
+ // Modifiers
+ 'async signal static abstract interface override virtual delegate ' +
+ // Control Structures
+ 'if while do for foreach else switch case break default return try catch ' +
+ // Visibility
+ 'public private protected internal ' +
+ // Other
+ 'using new this get set const stdout stdin stderr var',
+ built_in:
+ 'DBus GLib CCode Gee Object Gtk Posix',
+ literal:
+ 'false true null'
+ },
+ contains: [
+ {
+ className: 'class',
+ beginKeywords: 'class interface namespace', end: '{', excludeEnd: true,
+ illegal: '[^,:\\n\\s\\.]',
+ contains: [
+ hljs.UNDERSCORE_TITLE_MODE
+ ]
+ },
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ {
+ className: 'string',
+ begin: '"""', end: '"""',
+ relevance: 5
+ },
+ hljs.APOS_STRING_MODE,
+ hljs.QUOTE_STRING_MODE,
+ hljs.C_NUMBER_MODE,
+ {
+ className: 'meta',
+ begin: '^#', end: '$',
+ relevance: 2
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("vbnet",
+/*
+Language: VB.NET
+Author: Poren Chiang <ren.chiang@gmail.com>
+*/
+
+function(hljs) {
+ return {
+ aliases: ['vb'],
+ case_insensitive: true,
+ keywords: {
+ keyword:
+ 'addhandler addressof alias and andalso aggregate ansi as assembly auto binary by byref byval ' + /* a-b */
+ 'call case catch class compare const continue custom declare default delegate dim distinct do ' + /* c-d */
+ 'each equals else elseif end enum erase error event exit explicit finally for friend from function ' + /* e-f */
+ 'get global goto group handles if implements imports in inherits interface into is isfalse isnot istrue ' + /* g-i */
+ 'join key let lib like loop me mid mod module mustinherit mustoverride mybase myclass ' + /* j-m */
+ 'namespace narrowing new next not notinheritable notoverridable ' + /* n */
+ 'of off on operator option optional or order orelse overloads overridable overrides ' + /* o */
+ 'paramarray partial preserve private property protected public ' + /* p */
+ 'raiseevent readonly redim rem removehandler resume return ' + /* r */
+ 'select set shadows shared skip static step stop structure strict sub synclock ' + /* s */
+ 'take text then throw to try unicode until using when where while widening with withevents writeonly xor', /* t-x */
+ built_in:
+ 'boolean byte cbool cbyte cchar cdate cdec cdbl char cint clng cobj csbyte cshort csng cstr ctype ' + /* b-c */
+ 'date decimal directcast double gettype getxmlnamespace iif integer long object ' + /* d-o */
+ 'sbyte short single string trycast typeof uinteger ulong ushort', /* s-u */
+ literal:
+ 'true false nothing'
+ },
+ illegal: '//|{|}|endif|gosub|variant|wend', /* reserved deprecated keywords */
+ contains: [
+ hljs.inherit(hljs.QUOTE_STRING_MODE, {contains: [{begin: '""'}]}),
+ hljs.COMMENT(
+ '\'',
+ '$',
+ {
+ returnBegin: true,
+ contains: [
+ {
+ className: 'doctag',
+ begin: '\'\'\'|<!--|-->',
+ contains: [hljs.PHRASAL_WORDS_MODE]
+ },
+ {
+ className: 'doctag',
+ begin: '</?', end: '>',
+ contains: [hljs.PHRASAL_WORDS_MODE]
+ }
+ ]
+ }
+ ),
+ hljs.C_NUMBER_MODE,
+ {
+ className: 'meta',
+ begin: '#', end: '$',
+ keywords: {'meta-keyword': 'if else elseif end region externalsource'}
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("vbscript",
+/*
+Language: VBScript
+Author: Nikita Ledyaev <lenikita@yandex.ru>
+Contributors: Michal Gabrukiewicz <mgabru@gmail.com>
+Category: scripting
+*/
+
+function(hljs) {
+ return {
+ aliases: ['vbs'],
+ case_insensitive: true,
+ keywords: {
+ keyword:
+ 'call class const dim do loop erase execute executeglobal exit for each next function ' +
+ 'if then else on error option explicit new private property let get public randomize ' +
+ 'redim rem select case set stop sub while wend with end to elseif is or xor and not ' +
+ 'class_initialize class_terminate default preserve in me byval byref step resume goto',
+ built_in:
+ 'lcase month vartype instrrev ubound setlocale getobject rgb getref string ' +
+ 'weekdayname rnd dateadd monthname now day minute isarray cbool round formatcurrency ' +
+ 'conversions csng timevalue second year space abs clng timeserial fixs len asc ' +
+ 'isempty maths dateserial atn timer isobject filter weekday datevalue ccur isdate ' +
+ 'instr datediff formatdatetime replace isnull right sgn array snumeric log cdbl hex ' +
+ 'chr lbound msgbox ucase getlocale cos cdate cbyte rtrim join hour oct typename trim ' +
+ 'strcomp int createobject loadpicture tan formatnumber mid scriptenginebuildversion ' +
+ 'scriptengine split scriptengineminorversion cint sin datepart ltrim sqr ' +
+ 'scriptenginemajorversion time derived eval date formatpercent exp inputbox left ascw ' +
+ 'chrw regexp server response request cstr err',
+ literal:
+ 'true false null nothing empty'
+ },
+ illegal: '//',
+ contains: [
+ hljs.inherit(hljs.QUOTE_STRING_MODE, {contains: [{begin: '""'}]}),
+ hljs.COMMENT(
+ /'/,
+ /$/,
+ {
+ relevance: 0
+ }
+ ),
+ hljs.C_NUMBER_MODE
+ ]
+ };
+});
+
+hljs.registerLanguage("vbscript-html",
+/*
+Language: VBScript in HTML
+Requires: xml.js, vbscript.js
+Author: Ivan Sagalaev <maniac@softwaremaniacs.org>
+Description: "Bridge" language defining fragments of VBScript in HTML within <% .. %>
+Category: scripting
+*/
+
+function(hljs) {
+ return {
+ subLanguage: 'xml',
+ contains: [
+ {
+ begin: '<%', end: '%>',
+ subLanguage: 'vbscript'
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("verilog",
+/*
+Language: Verilog
+Author: Jon Evans <jon@craftyjon.com>
+Contributors: Boone Severson <boone.severson@gmail.com>
+Description: Verilog is a hardware description language used in electronic design automation to describe digital and mixed-signal systems. This highlighter supports Verilog and SystemVerilog through IEEE 1800-2012.
+*/
+
+function(hljs) {
+ var SV_KEYWORDS = {
+ keyword:
+ 'accept_on alias always always_comb always_ff always_latch and assert assign ' +
+ 'assume automatic before begin bind bins binsof bit break buf|0 bufif0 bufif1 ' +
+ 'byte case casex casez cell chandle checker class clocking cmos config const ' +
+ 'constraint context continue cover covergroup coverpoint cross deassign default ' +
+ 'defparam design disable dist do edge else end endcase endchecker endclass ' +
+ 'endclocking endconfig endfunction endgenerate endgroup endinterface endmodule ' +
+ 'endpackage endprimitive endprogram endproperty endspecify endsequence endtable ' +
+ 'endtask enum event eventually expect export extends extern final first_match for ' +
+ 'force foreach forever fork forkjoin function generate|5 genvar global highz0 highz1 ' +
+ 'if iff ifnone ignore_bins illegal_bins implements implies import incdir include ' +
+ 'initial inout input inside instance int integer interconnect interface intersect ' +
+ 'join join_any join_none large let liblist library local localparam logic longint ' +
+ 'macromodule matches medium modport module nand negedge nettype new nexttime nmos ' +
+ 'nor noshowcancelled not notif0 notif1 or output package packed parameter pmos ' +
+ 'posedge primitive priority program property protected pull0 pull1 pulldown pullup ' +
+ 'pulsestyle_ondetect pulsestyle_onevent pure rand randc randcase randsequence rcmos ' +
+ 'real realtime ref reg reject_on release repeat restrict return rnmos rpmos rtran ' +
+ 'rtranif0 rtranif1 s_always s_eventually s_nexttime s_until s_until_with scalared ' +
+ 'sequence shortint shortreal showcancelled signed small soft solve specify specparam ' +
+ 'static string strong strong0 strong1 struct super supply0 supply1 sync_accept_on ' +
+ 'sync_reject_on table tagged task this throughout time timeprecision timeunit tran ' +
+ 'tranif0 tranif1 tri tri0 tri1 triand trior trireg type typedef union unique unique0 ' +
+ 'unsigned until until_with untyped use uwire var vectored virtual void wait wait_order ' +
+ 'wand weak weak0 weak1 while wildcard wire with within wor xnor xor',
+ literal:
+ 'null',
+ built_in:
+ '$finish $stop $exit $fatal $error $warning $info $realtime $time $printtimescale ' +
+ '$bitstoreal $bitstoshortreal $itor $signed $cast $bits $stime $timeformat ' +
+ '$realtobits $shortrealtobits $rtoi $unsigned $asserton $assertkill $assertpasson ' +
+ '$assertfailon $assertnonvacuouson $assertoff $assertcontrol $assertpassoff ' +
+ '$assertfailoff $assertvacuousoff $isunbounded $sampled $fell $changed $past_gclk ' +
+ '$fell_gclk $changed_gclk $rising_gclk $steady_gclk $coverage_control ' +
+ '$coverage_get $coverage_save $set_coverage_db_name $rose $stable $past ' +
+ '$rose_gclk $stable_gclk $future_gclk $falling_gclk $changing_gclk $display ' +
+ '$coverage_get_max $coverage_merge $get_coverage $load_coverage_db $typename ' +
+ '$unpacked_dimensions $left $low $increment $clog2 $ln $log10 $exp $sqrt $pow ' +
+ '$floor $ceil $sin $cos $tan $countbits $onehot $isunknown $fatal $warning ' +
+ '$dimensions $right $high $size $asin $acos $atan $atan2 $hypot $sinh $cosh ' +
+ '$tanh $asinh $acosh $atanh $countones $onehot0 $error $info $random ' +
+ '$dist_chi_square $dist_erlang $dist_exponential $dist_normal $dist_poisson ' +
+ '$dist_t $dist_uniform $q_initialize $q_remove $q_exam $async$and$array ' +
+ '$async$nand$array $async$or$array $async$nor$array $sync$and$array ' +
+ '$sync$nand$array $sync$or$array $sync$nor$array $q_add $q_full $psprintf ' +
+ '$async$and$plane $async$nand$plane $async$or$plane $async$nor$plane ' +
+ '$sync$and$plane $sync$nand$plane $sync$or$plane $sync$nor$plane $system ' +
+ '$display $displayb $displayh $displayo $strobe $strobeb $strobeh $strobeo ' +
+ '$write $readmemb $readmemh $writememh $value$plusargs ' +
+ '$dumpvars $dumpon $dumplimit $dumpports $dumpportson $dumpportslimit ' +
+ '$writeb $writeh $writeo $monitor $monitorb $monitorh $monitoro $writememb ' +
+ '$dumpfile $dumpoff $dumpall $dumpflush $dumpportsoff $dumpportsall ' +
+ '$dumpportsflush $fclose $fdisplay $fdisplayb $fdisplayh $fdisplayo ' +
+ '$fstrobe $fstrobeb $fstrobeh $fstrobeo $swrite $swriteb $swriteh ' +
+ '$swriteo $fscanf $fread $fseek $fflush $feof $fopen $fwrite $fwriteb ' +
+ '$fwriteh $fwriteo $fmonitor $fmonitorb $fmonitorh $fmonitoro $sformat ' +
+ '$sformatf $fgetc $ungetc $fgets $sscanf $rewind $ftell $ferror'
+ };
+ return {
+ aliases: ['v', 'sv', 'svh'],
+ case_insensitive: false,
+ keywords: SV_KEYWORDS, lexemes: /[\w\$]+/,
+ contains: [
+ hljs.C_BLOCK_COMMENT_MODE,
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.QUOTE_STRING_MODE,
+ {
+ className: 'number',
+ contains: [hljs.BACKSLASH_ESCAPE],
+ variants: [
+ {begin: '\\b((\\d+\'(b|h|o|d|B|H|O|D))[0-9xzXZa-fA-F_]+)'},
+ {begin: '\\B((\'(b|h|o|d|B|H|O|D))[0-9xzXZa-fA-F_]+)'},
+ {begin: '\\b([0-9_])+', relevance: 0}
+ ]
+ },
+ /* parameters to instances */
+ {
+ className: 'variable',
+ variants: [
+ {begin: '#\\((?!parameter).+\\)'},
+ {begin: '\\.\\w+', relevance: 0},
+ ]
+ },
+ {
+ className: 'meta',
+ begin: '`', end: '$',
+ keywords: {'meta-keyword': 'define __FILE__ ' +
+ '__LINE__ begin_keywords celldefine default_nettype define ' +
+ 'else elsif end_keywords endcelldefine endif ifdef ifndef ' +
+ 'include line nounconnected_drive pragma resetall timescale ' +
+ 'unconnected_drive undef undefineall'},
+ relevance: 0
+ }
+ ]
+ }; // return
+});
+
+hljs.registerLanguage("vhdl",
+/*
+Language: VHDL
+Author: Igor Kalnitsky <igor@kalnitsky.org>
+Contributors: Daniel C.K. Kho <daniel.kho@gmail.com>, Guillaume Savaton <guillaume.savaton@eseo.fr>
+Description: VHDL is a hardware description language used in electronic design automation to describe digital and mixed-signal systems.
+*/
+
+function(hljs) {
+ // Regular expression for VHDL numeric literals.
+
+ // Decimal literal:
+ var INTEGER_RE = '\\d(_|\\d)*';
+ var EXPONENT_RE = '[eE][-+]?' + INTEGER_RE;
+ var DECIMAL_LITERAL_RE = INTEGER_RE + '(\\.' + INTEGER_RE + ')?' + '(' + EXPONENT_RE + ')?';
+ // Based literal:
+ var BASED_INTEGER_RE = '\\w+';
+ var BASED_LITERAL_RE = INTEGER_RE + '#' + BASED_INTEGER_RE + '(\\.' + BASED_INTEGER_RE + ')?' + '#' + '(' + EXPONENT_RE + ')?';
+
+ var NUMBER_RE = '\\b(' + BASED_LITERAL_RE + '|' + DECIMAL_LITERAL_RE + ')';
+
+ return {
+ case_insensitive: true,
+ keywords: {
+ keyword:
+ 'abs access after alias all and architecture array assert attribute begin block ' +
+ 'body buffer bus case component configuration constant context cover disconnect ' +
+ 'downto default else elsif end entity exit fairness file for force function generate ' +
+ 'generic group guarded if impure in inertial inout is label library linkage literal ' +
+ 'loop map mod nand new next nor not null of on open or others out package port ' +
+ 'postponed procedure process property protected pure range record register reject ' +
+ 'release rem report restrict restrict_guarantee return rol ror select sequence ' +
+ 'severity shared signal sla sll sra srl strong subtype then to transport type ' +
+ 'unaffected units until use variable vmode vprop vunit wait when while with xnor xor',
+ built_in:
+ 'boolean bit character severity_level integer time delay_length natural positive ' +
+ 'string bit_vector file_open_kind file_open_status std_ulogic std_ulogic_vector ' +
+ 'std_logic std_logic_vector unsigned signed boolean_vector integer_vector ' +
+ 'real_vector time_vector'
+ },
+ illegal: '{',
+ contains: [
+ hljs.C_BLOCK_COMMENT_MODE, // VHDL-2008 block commenting.
+ hljs.COMMENT('--', '$'),
+ hljs.QUOTE_STRING_MODE,
+ {
+ className: 'number',
+ begin: NUMBER_RE,
+ relevance: 0
+ },
+ {
+ className: 'literal',
+ begin: '\'(U|X|0|1|Z|W|L|H|-)\'',
+ contains: [hljs.BACKSLASH_ESCAPE]
+ },
+ {
+ className: 'symbol',
+ begin: '\'[A-Za-z](_?[A-Za-z0-9])*',
+ contains: [hljs.BACKSLASH_ESCAPE]
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("vim",
+/*
+Language: Vim Script
+Author: Jun Yang <yangjvn@126.com>
+Description: full keyword and built-in from http://vimdoc.sourceforge.net/htmldoc/
+Category: scripting
+*/
+
+function(hljs) {
+ return {
+ lexemes: /[!#@\w]+/,
+ keywords: {
+ keyword:
+ // express version except: ! & * < = > !! # @ @@
+ 'N|0 P|0 X|0 a|0 ab abc abo al am an|0 ar arga argd arge argdo argg argl argu as au aug aun b|0 bN ba bad bd be bel bf bl bm bn bo bp br brea breaka breakd breakl bro bufdo buffers bun bw c|0 cN cNf ca cabc caddb cad caddf cal cat cb cc ccl cd ce cex cf cfir cgetb cgete cg changes chd che checkt cl cla clo cm cmapc cme cn cnew cnf cno cnorea cnoreme co col colo com comc comp con conf cope '+
+ 'cp cpf cq cr cs cst cu cuna cunme cw delm deb debugg delc delf dif diffg diffo diffp diffpu diffs diffthis dig di dl dell dj dli do doautoa dp dr ds dsp e|0 ea ec echoe echoh echom echon el elsei em en endfo endf endt endw ene ex exe exi exu f|0 files filet fin fina fini fir fix fo foldc foldd folddoc foldo for fu go gr grepa gu gv ha helpf helpg helpt hi hid his ia iabc if ij il im imapc '+
+ 'ime ino inorea inoreme int is isp iu iuna iunme j|0 ju k|0 keepa kee keepj lN lNf l|0 lad laddb laddf la lan lat lb lc lch lcl lcs le lefta let lex lf lfir lgetb lgete lg lgr lgrepa lh ll lla lli lmak lm lmapc lne lnew lnf ln loadk lo loc lockv lol lope lp lpf lr ls lt lu lua luad luaf lv lvimgrepa lw m|0 ma mak map mapc marks mat me menut mes mk mks mksp mkv mkvie mod mz mzf nbc nb nbs new nm nmapc nme nn nnoreme noa no noh norea noreme norm nu nun nunme ol o|0 om omapc ome on ono onoreme opt ou ounme ow p|0 '+
+ 'profd prof pro promptr pc ped pe perld po popu pp pre prev ps pt ptN ptf ptj ptl ptn ptp ptr pts pu pw py3 python3 py3d py3f py pyd pyf quita qa rec red redi redr redraws reg res ret retu rew ri rightb rub rubyd rubyf rund ru rv sN san sa sal sav sb sbN sba sbf sbl sbm sbn sbp sbr scrip scripte scs se setf setg setl sf sfir sh sim sig sil sl sla sm smap smapc sme sn sni sno snor snoreme sor '+
+ 'so spelld spe spelli spellr spellu spellw sp spr sre st sta startg startr star stopi stj sts sun sunm sunme sus sv sw sy synti sync tN tabN tabc tabdo tabe tabf tabfir tabl tabm tabnew '+
+ 'tabn tabo tabp tabr tabs tab ta tags tc tcld tclf te tf th tj tl tm tn to tp tr try ts tu u|0 undoj undol una unh unl unlo unm unme uns up ve verb vert vim vimgrepa vi viu vie vm vmapc vme vne vn vnoreme vs vu vunme windo w|0 wN wa wh wi winc winp wn wp wq wqa ws wu wv x|0 xa xmapc xm xme xn xnoreme xu xunme y|0 z|0 ~ '+
+ // full version
+ 'Next Print append abbreviate abclear aboveleft all amenu anoremenu args argadd argdelete argedit argglobal arglocal argument ascii autocmd augroup aunmenu buffer bNext ball badd bdelete behave belowright bfirst blast bmodified bnext botright bprevious brewind break breakadd breakdel breaklist browse bunload '+
+ 'bwipeout change cNext cNfile cabbrev cabclear caddbuffer caddexpr caddfile call catch cbuffer cclose center cexpr cfile cfirst cgetbuffer cgetexpr cgetfile chdir checkpath checktime clist clast close cmap cmapclear cmenu cnext cnewer cnfile cnoremap cnoreabbrev cnoremenu copy colder colorscheme command comclear compiler continue confirm copen cprevious cpfile cquit crewind cscope cstag cunmap '+
+ 'cunabbrev cunmenu cwindow delete delmarks debug debuggreedy delcommand delfunction diffupdate diffget diffoff diffpatch diffput diffsplit digraphs display deletel djump dlist doautocmd doautoall deletep drop dsearch dsplit edit earlier echo echoerr echohl echomsg else elseif emenu endif endfor '+
+ 'endfunction endtry endwhile enew execute exit exusage file filetype find finally finish first fixdel fold foldclose folddoopen folddoclosed foldopen function global goto grep grepadd gui gvim hardcopy help helpfind helpgrep helptags highlight hide history insert iabbrev iabclear ijump ilist imap '+
+ 'imapclear imenu inoremap inoreabbrev inoremenu intro isearch isplit iunmap iunabbrev iunmenu join jumps keepalt keepmarks keepjumps lNext lNfile list laddexpr laddbuffer laddfile last language later lbuffer lcd lchdir lclose lcscope left leftabove lexpr lfile lfirst lgetbuffer lgetexpr lgetfile lgrep lgrepadd lhelpgrep llast llist lmake lmap lmapclear lnext lnewer lnfile lnoremap loadkeymap loadview '+
+ 'lockmarks lockvar lolder lopen lprevious lpfile lrewind ltag lunmap luado luafile lvimgrep lvimgrepadd lwindow move mark make mapclear match menu menutranslate messages mkexrc mksession mkspell mkvimrc mkview mode mzscheme mzfile nbclose nbkey nbsart next nmap nmapclear nmenu nnoremap '+
+ 'nnoremenu noautocmd noremap nohlsearch noreabbrev noremenu normal number nunmap nunmenu oldfiles open omap omapclear omenu only onoremap onoremenu options ounmap ounmenu ownsyntax print profdel profile promptfind promptrepl pclose pedit perl perldo pop popup ppop preserve previous psearch ptag ptNext '+
+ 'ptfirst ptjump ptlast ptnext ptprevious ptrewind ptselect put pwd py3do py3file python pydo pyfile quit quitall qall read recover redo redir redraw redrawstatus registers resize retab return rewind right rightbelow ruby rubydo rubyfile rundo runtime rviminfo substitute sNext sandbox sargument sall saveas sbuffer sbNext sball sbfirst sblast sbmodified sbnext sbprevious sbrewind scriptnames scriptencoding '+
+ 'scscope set setfiletype setglobal setlocal sfind sfirst shell simalt sign silent sleep slast smagic smapclear smenu snext sniff snomagic snoremap snoremenu sort source spelldump spellgood spellinfo spellrepall spellundo spellwrong split sprevious srewind stop stag startgreplace startreplace '+
+ 'startinsert stopinsert stjump stselect sunhide sunmap sunmenu suspend sview swapname syntax syntime syncbind tNext tabNext tabclose tabedit tabfind tabfirst tablast tabmove tabnext tabonly tabprevious tabrewind tag tcl tcldo tclfile tearoff tfirst throw tjump tlast tmenu tnext topleft tprevious '+'trewind tselect tunmenu undo undojoin undolist unabbreviate unhide unlet unlockvar unmap unmenu unsilent update vglobal version verbose vertical vimgrep vimgrepadd visual viusage view vmap vmapclear vmenu vnew '+
+ 'vnoremap vnoremenu vsplit vunmap vunmenu write wNext wall while winsize wincmd winpos wnext wprevious wqall wsverb wundo wviminfo xit xall xmapclear xmap xmenu xnoremap xnoremenu xunmap xunmenu yank',
+ built_in: //built in func
+ 'synIDtrans atan2 range matcharg did_filetype asin feedkeys xor argv ' +
+ 'complete_check add getwinposx getqflist getwinposy screencol ' +
+ 'clearmatches empty extend getcmdpos mzeval garbagecollect setreg ' +
+ 'ceil sqrt diff_hlID inputsecret get getfperm getpid filewritable ' +
+ 'shiftwidth max sinh isdirectory synID system inputrestore winline ' +
+ 'atan visualmode inputlist tabpagewinnr round getregtype mapcheck ' +
+ 'hasmapto histdel argidx findfile sha256 exists toupper getcmdline ' +
+ 'taglist string getmatches bufnr strftime winwidth bufexists ' +
+ 'strtrans tabpagebuflist setcmdpos remote_read printf setloclist ' +
+ 'getpos getline bufwinnr float2nr len getcmdtype diff_filler luaeval ' +
+ 'resolve libcallnr foldclosedend reverse filter has_key bufname ' +
+ 'str2float strlen setline getcharmod setbufvar index searchpos ' +
+ 'shellescape undofile foldclosed setqflist buflisted strchars str2nr ' +
+ 'virtcol floor remove undotree remote_expr winheight gettabwinvar ' +
+ 'reltime cursor tabpagenr finddir localtime acos getloclist search ' +
+ 'tanh matchend rename gettabvar strdisplaywidth type abs py3eval ' +
+ 'setwinvar tolower wildmenumode log10 spellsuggest bufloaded ' +
+ 'synconcealed nextnonblank server2client complete settabwinvar ' +
+ 'executable input wincol setmatches getftype hlID inputsave ' +
+ 'searchpair or screenrow line settabvar histadd deepcopy strpart ' +
+ 'remote_peek and eval getftime submatch screenchar winsaveview ' +
+ 'matchadd mkdir screenattr getfontname libcall reltimestr getfsize ' +
+ 'winnr invert pow getbufline byte2line soundfold repeat fnameescape ' +
+ 'tagfiles sin strwidth spellbadword trunc maparg log lispindent ' +
+ 'hostname setpos globpath remote_foreground getchar synIDattr ' +
+ 'fnamemodify cscope_connection stridx winbufnr indent min ' +
+ 'complete_add nr2char searchpairpos inputdialog values matchlist ' +
+ 'items hlexists strridx browsedir expand fmod pathshorten line2byte ' +
+ 'argc count getwinvar glob foldtextresult getreg foreground cosh ' +
+ 'matchdelete has char2nr simplify histget searchdecl iconv ' +
+ 'winrestcmd pumvisible writefile foldlevel haslocaldir keys cos ' +
+ 'matchstr foldtext histnr tan tempname getcwd byteidx getbufvar ' +
+ 'islocked escape eventhandler remote_send serverlist winrestview ' +
+ 'synstack pyeval prevnonblank readfile cindent filereadable changenr ' +
+ 'exp'
+ },
+ illegal: /;/,
+ contains: [
+ hljs.NUMBER_MODE,
+ hljs.APOS_STRING_MODE,
+
+ /*
+ A double quote can start either a string or a line comment. Strings are
+ ended before the end of a line by another double quote and can contain
+ escaped double-quotes and post-escaped line breaks.
+
+ Also, any double quote at the beginning of a line is a comment but we
+ don't handle that properly at the moment: any double quote inside will
+ turn them into a string. Handling it properly will require a smarter
+ parser.
+ */
+ {
+ className: 'string',
+ begin: /"(\\"|\n\\|[^"\n])*"/
+ },
+ hljs.COMMENT('"', '$'),
+
+ {
+ className: 'variable',
+ begin: /[bwtglsav]:[\w\d_]*/
+ },
+ {
+ className: 'function',
+ beginKeywords: 'function function!', end: '$',
+ relevance: 0,
+ contains: [
+ hljs.TITLE_MODE,
+ {
+ className: 'params',
+ begin: '\\(', end: '\\)'
+ }
+ ]
+ },
+ {
+ className: 'symbol',
+ begin: /<[\w-]+>/
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("x86asm",
+/*
+Language: Intel x86 Assembly
+Author: innocenat <innocenat@gmail.com>
+Description: x86 assembly language using Intel's mnemonic and NASM syntax
+Category: assembler
+*/
+
+function(hljs) {
+ return {
+ case_insensitive: true,
+ lexemes: '[.%]?' + hljs.IDENT_RE,
+ keywords: {
+ keyword:
+ 'lock rep repe repz repne repnz xaquire xrelease bnd nobnd ' +
+ 'aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63',
+ built_in:
+ // Instruction pointer
+ 'ip eip rip ' +
+ // 8-bit registers
+ 'al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b ' +
+ // 16-bit registers
+ 'ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w ' +
+ // 32-bit registers
+ 'eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d ' +
+ // 64-bit registers
+ 'rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 ' +
+ // Segment registers
+ 'cs ds es fs gs ss ' +
+ // Floating point stack registers
+ 'st st0 st1 st2 st3 st4 st5 st6 st7 ' +
+ // MMX Registers
+ 'mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 ' +
+ // SSE registers
+ 'xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7 xmm8 xmm9 xmm10 xmm11 xmm12 xmm13 xmm14 xmm15 ' +
+ 'xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 ' +
+ // AVX registers
+ 'ymm0 ymm1 ymm2 ymm3 ymm4 ymm5 ymm6 ymm7 ymm8 ymm9 ymm10 ymm11 ymm12 ymm13 ymm14 ymm15 ' +
+ 'ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 ' +
+ // AVX-512F registers
+ 'zmm0 zmm1 zmm2 zmm3 zmm4 zmm5 zmm6 zmm7 zmm8 zmm9 zmm10 zmm11 zmm12 zmm13 zmm14 zmm15 ' +
+ 'zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 ' +
+ // AVX-512F mask registers
+ 'k0 k1 k2 k3 k4 k5 k6 k7 ' +
+ // Bound (MPX) register
+ 'bnd0 bnd1 bnd2 bnd3 ' +
+ // Special register
+ 'cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 ' +
+ // NASM altreg package
+ 'r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b ' +
+ 'r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d ' +
+ 'r0h r1h r2h r3h ' +
+ 'r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l ' +
+
+ 'db dw dd dq dt ddq do dy dz ' +
+ 'resb resw resd resq rest resdq reso resy resz ' +
+ 'incbin equ times ' +
+ 'byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr',
+
+ meta:
+ '%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif ' +
+ '%if %ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep ' +
+ '%endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment ' +
+ '.nolist ' +
+ '__FILE__ __LINE__ __SECT__ __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ ' +
+ '__UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__ __PASS__ struc endstruc istruc at iend ' +
+ 'align alignb sectalign daz nodaz up down zero default option assume public ' +
+
+ 'bits use16 use32 use64 default section segment absolute extern global common cpu float ' +
+ '__utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ ' +
+ '__float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ ' +
+ '__Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e ' +
+ 'float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__'
+ },
+ contains: [
+ hljs.COMMENT(
+ ';',
+ '$',
+ {
+ relevance: 0
+ }
+ ),
+ {
+ className: 'number',
+ variants: [
+ // Float number and x87 BCD
+ {
+ begin: '\\b(?:([0-9][0-9_]*)?\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|' +
+ '(0[Xx])?[0-9][0-9_]*\\.?[0-9_]*(?:[pP](?:[+-]?[0-9_]+)?)?)\\b',
+ relevance: 0
+ },
+
+ // Hex number in $
+ { begin: '\\$[0-9][0-9A-Fa-f]*', relevance: 0 },
+
+ // Number in H,D,T,Q,O,B,Y suffix
+ { begin: '\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[Hh]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\b' },
+
+ // Number in X,D,T,Q,O,B,Y prefix
+ { begin: '\\b(?:0[Xx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\b'}
+ ]
+ },
+ // Double quote string
+ hljs.QUOTE_STRING_MODE,
+ {
+ className: 'string',
+ variants: [
+ // Single-quoted string
+ { begin: '\'', end: '[^\\\\]\'' },
+ // Backquoted string
+ { begin: '`', end: '[^\\\\]`' }
+ ],
+ relevance: 0
+ },
+ {
+ className: 'symbol',
+ variants: [
+ // Global label and local label
+ { begin: '^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)' },
+ // Macro-local label
+ { begin: '^\\s*%%[A-Za-z0-9_$#@~.?]*:' }
+ ],
+ relevance: 0
+ },
+ // Macro parameter
+ {
+ className: 'subst',
+ begin: '%[0-9]+',
+ relevance: 0
+ },
+ // Macro parameter
+ {
+ className: 'subst',
+ begin: '%!\S+',
+ relevance: 0
+ },
+ {
+ className: 'meta',
+ begin: /^\s*\.[\w_-]+/
+ }
+ ]
+ };
+});
+
+hljs.registerLanguage("xl",
+/*
+Language: XL
+Author: Christophe de Dinechin <christophe@taodyne.com>
+Description: An extensible programming language, based on parse tree rewriting (http://xlr.sf.net)
+*/
+
+function(hljs) {
+ var BUILTIN_MODULES =
+ 'ObjectLoader Animate MovieCredits Slides Filters Shading Materials LensFlare Mapping VLCAudioVideo ' +
+ 'StereoDecoder PointCloud NetworkAccess RemoteControl RegExp ChromaKey Snowfall NodeJS Speech Charts';
+
+ var XL_KEYWORDS = {
+ keyword:
+ 'if then else do while until for loop import with is as where when by data constant ' +
+ 'integer real text name boolean symbol infix prefix postfix block tree',
+ literal:
+ 'true false nil',
+ built_in:
+ 'in mod rem and or xor not abs sign floor ceil sqrt sin cos tan asin ' +
+ 'acos atan exp expm1 log log2 log10 log1p pi at text_length text_range ' +
+ 'text_find text_replace contains page slide basic_slide title_slide ' +
+ 'title subtitle fade_in fade_out fade_at clear_color color line_color ' +
+ 'line_width texture_wrap texture_transform texture scale_?x scale_?y ' +
+ 'scale_?z? translate_?x translate_?y translate_?z? rotate_?x rotate_?y ' +
+ 'rotate_?z? rectangle circle ellipse sphere path line_to move_to ' +
+ 'quad_to curve_to theme background contents locally time mouse_?x ' +
+ 'mouse_?y mouse_buttons ' +
+ BUILTIN_MODULES
+ };
+
+ var DOUBLE_QUOTE_TEXT = {
+ className: 'string',
+ begin: '"', end: '"', illegal: '\\n'
+ };
+ var SINGLE_QUOTE_TEXT = {
+ className: 'string',
+ begin: '\'', end: '\'', illegal: '\\n'
+ };
+ var LONG_TEXT = {
+ className: 'string',
+ begin: '<<', end: '>>'
+ };
+ var BASED_NUMBER = {
+ className: 'number',
+ begin: '[0-9]+#[0-9A-Z_]+(\\.[0-9-A-Z_]+)?#?([Ee][+-]?[0-9]+)?'
+ };
+ var IMPORT = {
+ beginKeywords: 'import', end: '$',
+ keywords: XL_KEYWORDS,
+ contains: [DOUBLE_QUOTE_TEXT]
+ };
+ var FUNCTION_DEFINITION = {
+ className: 'function',
+ begin: /[a-z][^\n]*->/, returnBegin: true, end: /->/,
+ contains: [
+ hljs.inherit(hljs.TITLE_MODE, {starts: {
+ endsWithParent: true,
+ keywords: XL_KEYWORDS
+ }})
+ ]
+ };
+ return {
+ aliases: ['tao'],
+ lexemes: /[a-zA-Z][a-zA-Z0-9_?]*/,
+ keywords: XL_KEYWORDS,
+ contains: [
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.C_BLOCK_COMMENT_MODE,
+ DOUBLE_QUOTE_TEXT,
+ SINGLE_QUOTE_TEXT,
+ LONG_TEXT,
+ FUNCTION_DEFINITION,
+ IMPORT,
+ BASED_NUMBER,
+ hljs.NUMBER_MODE
+ ]
+ };
+});
+
+hljs.registerLanguage("xquery",
+/*
+Language: XQuery
+Author: Dirk Kirsten <dk@basex.org>
+Description: Supports XQuery 3.1 including XQuery Update 3, so also XPath (as it is a superset)
+Category: functional
+*/
+
+function(hljs) {
+ var KEYWORDS = 'for let if while then else return where group by xquery encoding version' +
+ 'module namespace boundary-space preserve strip default collation base-uri ordering' +
+ 'copy-namespaces order declare import schema namespace function option in allowing empty' +
+ 'at tumbling window sliding window start when only end when previous next stable ascending' +
+ 'descending empty greatest least some every satisfies switch case typeswitch try catch and' +
+ 'or to union intersect instance of treat as castable cast map array delete insert into' +
+ 'replace value rename copy modify update';
+ var LITERAL = 'false true xs:string xs:integer element item xs:date xs:datetime xs:float xs:double xs:decimal QName xs:anyURI xs:long xs:int xs:short xs:byte attribute';
+ var VAR = {
+ begin: /\$[a-zA-Z0-9\-]+/
+ };
+
+ var NUMBER = {
+ className: 'number',
+ begin: '(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b',
+ relevance: 0
+ };
+
+ var STRING = {
+ className: 'string',
+ variants: [
+ {begin: /"/, end: /"/, contains: [{begin: /""/, relevance: 0}]},
+ {begin: /'/, end: /'/, contains: [{begin: /''/, relevance: 0}]}
+ ]
+ };
+
+ var ANNOTATION = {
+ className: 'meta',
+ begin: '%\\w+'
+ };
+
+ var COMMENT = {
+ className: 'comment',
+ begin: '\\(:', end: ':\\)',
+ relevance: 10,
+ contains: [
+ {
+ className: 'doctag', begin: '@\\w+'
+ }
+ ]
+ };
+
+ var METHOD = {
+ begin: '{', end: '}'
+ };
+
+ var CONTAINS = [
+ VAR,
+ STRING,
+ NUMBER,
+ COMMENT,
+ ANNOTATION,
+ METHOD
+ ];
+ METHOD.contains = CONTAINS;
+
+
+ return {
+ aliases: ['xpath', 'xq'],
+ case_insensitive: false,
+ lexemes: /[a-zA-Z\$][a-zA-Z0-9_:\-]*/,
+ illegal: /(proc)|(abstract)|(extends)|(until)|(#)/,
+ keywords: {
+ keyword: KEYWORDS,
+ literal: LITERAL
+ },
+ contains: CONTAINS
+ };
+});
+
+hljs.registerLanguage("zephir",
+/*
+ Language: Zephir
+ Author: Oleg Efimov <efimovov@gmail.com>
+ */
+
+function(hljs) {
+ var STRING = {
+ className: 'string',
+ contains: [hljs.BACKSLASH_ESCAPE],
+ variants: [
+ {
+ begin: 'b"', end: '"'
+ },
+ {
+ begin: 'b\'', end: '\''
+ },
+ hljs.inherit(hljs.APOS_STRING_MODE, {illegal: null}),
+ hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null})
+ ]
+ };
+ var NUMBER = {variants: [hljs.BINARY_NUMBER_MODE, hljs.C_NUMBER_MODE]};
+ return {
+ aliases: ['zep'],
+ case_insensitive: true,
+ keywords:
+ 'and include_once list abstract global private echo interface as static endswitch ' +
+ 'array null if endwhile or const for endforeach self var let while isset public ' +
+ 'protected exit foreach throw elseif include __FILE__ empty require_once do xor ' +
+ 'return parent clone use __CLASS__ __LINE__ else break print eval new ' +
+ 'catch __METHOD__ case exception default die require __FUNCTION__ ' +
+ 'enddeclare final try switch continue endfor endif declare unset true false ' +
+ 'trait goto instanceof insteadof __DIR__ __NAMESPACE__ ' +
+ 'yield finally int uint long ulong char uchar double float bool boolean string' +
+ 'likely unlikely',
+ contains: [
+ hljs.C_LINE_COMMENT_MODE,
+ hljs.HASH_COMMENT_MODE,
+ hljs.COMMENT(
+ '/\\*',
+ '\\*/',
+ {
+ contains: [
+ {
+ className: 'doctag',
+ begin: '@[A-Za-z]+'
+ }
+ ]
+ }
+ ),
+ hljs.COMMENT(
+ '__halt_compiler.+?;',
+ false,
+ {
+ endsWithParent: true,
+ keywords: '__halt_compiler',
+ lexemes: hljs.UNDERSCORE_IDENT_RE
+ }
+ ),
+ {
+ className: 'string',
+ begin: '<<<[\'"]?\\w+[\'"]?$', end: '^\\w+;',
+ contains: [hljs.BACKSLASH_ESCAPE]
+ },
+ {
+ // swallow composed identifiers to avoid parsing them as keywords
+ begin: /(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/
+ },
+ {
+ className: 'function',
+ beginKeywords: 'function', end: /[;{]/, excludeEnd: true,
+ illegal: '\\$|\\[|%',
+ contains: [
+ hljs.UNDERSCORE_TITLE_MODE,
+ {
+ className: 'params',
+ begin: '\\(', end: '\\)',
+ contains: [
+ 'self',
+ hljs.C_BLOCK_COMMENT_MODE,
+ STRING,
+ NUMBER
+ ]
+ }
+ ]
+ },
+ {
+ className: 'class',
+ beginKeywords: 'class interface', end: '{', excludeEnd: true,
+ illegal: /[:\(\$"]/,
+ contains: [
+ {beginKeywords: 'extends implements'},
+ hljs.UNDERSCORE_TITLE_MODE
+ ]
+ },
+ {
+ beginKeywords: 'namespace', end: ';',
+ illegal: /[\.']/,
+ contains: [hljs.UNDERSCORE_TITLE_MODE]
+ },
+ {
+ beginKeywords: 'use', end: ';',
+ contains: [hljs.UNDERSCORE_TITLE_MODE]
+ },
+ {
+ begin: '=>' // No markup, just a relevance booster
+ },
+ STRING,
+ NUMBER
+ ]
+ };
+});
+
+hljs.initHighlightingOnLoad();
+})();
diff --git a/GitCandy.Web/Scripts/jquery-2.0.3.intellisense.js b/GitCandy.Web/Scripts/jquery-2.0.3.intellisense.js
new file mode 100644
index 0000000..a88b6c6
--- /dev/null
+++ b/GitCandy.Web/Scripts/jquery-2.0.3.intellisense.js
@@ -0,0 +1,2670 @@
+intellisense.annotate(jQuery, {
+ 'ajax': function() {
+ /// <signature>
+ /// <summary>Perform an asynchronous HTTP (Ajax) request.</summary>
+ /// <param name="url" type="String">A string containing the URL to which the request is sent.</param>
+ /// <param name="settings" type="PlainObject">A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup(). See jQuery.ajax( settings ) below for a complete list of all settings.</param>
+ /// <returns type="jqXHR" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Perform an asynchronous HTTP (Ajax) request.</summary>
+ /// <param name="settings" type="PlainObject">A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup().</param>
+ /// <returns type="jqXHR" />
+ /// </signature>
+ },
+ 'ajaxPrefilter': function() {
+ /// <signature>
+ /// <summary>Handle custom Ajax options or modify existing options before each request is sent and before they are processed by $.ajax().</summary>
+ /// <param name="dataTypes" type="String">An optional string containing one or more space-separated dataTypes</param>
+ /// <param name="handler(options, originalOptions, jqXHR)" type="Function">A handler to set default values for future Ajax requests.</param>
+ /// </signature>
+ },
+ 'ajaxSetup': function() {
+ /// <signature>
+ /// <summary>Set default values for future Ajax requests. Its use is not recommended.</summary>
+ /// <param name="options" type="PlainObject">A set of key/value pairs that configure the default Ajax request. All options are optional.</param>
+ /// </signature>
+ },
+ 'ajaxTransport': function() {
+ /// <signature>
+ /// <summary>Creates an object that handles the actual transmission of Ajax data.</summary>
+ /// <param name="dataType" type="String">A string identifying the data type to use</param>
+ /// <param name="handler(options, originalOptions, jqXHR)" type="Function">A handler to return the new transport object to use with the data type provided in the first argument.</param>
+ /// </signature>
+ },
+ 'boxModel': function() {
+ /// <summary>Deprecated in jQuery 1.3 (see jQuery.support). States if the current page, in the user's browser, is being rendered using the W3C CSS Box Model.</summary>
+ /// <returns type="Boolean" />
+ },
+ 'browser': function() {
+ /// <summary>Contains flags for the useragent, read from navigator.userAgent. This property was removed in jQuery 1.9 and is available only through the jQuery.migrate plugin. Please try to use feature detection instead.</summary>
+ /// <returns type="PlainObject" />
+ },
+ 'browser.version': function() {
+ /// <summary>The version number of the rendering engine for the user's browser. This property was removed in jQuery 1.9 and is available only through the jQuery.migrate plugin.</summary>
+ /// <returns type="String" />
+ },
+ 'Callbacks': function() {
+ /// <signature>
+ /// <summary>A multi-purpose callbacks list object that provides a powerful way to manage callback lists.</summary>
+ /// <param name="flags" type="String">An optional list of space-separated flags that change how the callback list behaves.</param>
+ /// <returns type="Callbacks" />
+ /// </signature>
+ },
+ 'contains': function() {
+ /// <signature>
+ /// <summary>Check to see if a DOM element is a descendant of another DOM element.</summary>
+ /// <param name="container" type="Element">The DOM element that may contain the other element.</param>
+ /// <param name="contained" type="Element">The DOM element that may be contained by (a descendant of) the other element.</param>
+ /// <returns type="Boolean" />
+ /// </signature>
+ },
+ 'cssHooks': function() {
+ /// <summary>Hook directly into jQuery to override how particular CSS properties are retrieved or set, normalize CSS property naming, or create custom properties.</summary>
+ /// <returns type="Object" />
+ },
+ 'data': function() {
+ /// <signature>
+ /// <summary>Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element.</summary>
+ /// <param name="element" type="Element">The DOM element to query for the data.</param>
+ /// <param name="key" type="String">Name of the data stored.</param>
+ /// <returns type="Object" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element.</summary>
+ /// <param name="element" type="Element">The DOM element to query for the data.</param>
+ /// <returns type="Object" />
+ /// </signature>
+ },
+ 'Deferred': function() {
+ /// <signature>
+ /// <summary>A constructor function that returns a chainable utility object with methods to register multiple callbacks into callback queues, invoke callback queues, and relay the success or failure state of any synchronous or asynchronous function.</summary>
+ /// <param name="beforeStart" type="Function">A function that is called just before the constructor returns.</param>
+ /// <returns type="Deferred" />
+ /// </signature>
+ },
+ 'dequeue': function() {
+ /// <signature>
+ /// <summary>Execute the next function on the queue for the matched element.</summary>
+ /// <param name="element" type="Element">A DOM element from which to remove and execute a queued function.</param>
+ /// <param name="queueName" type="String">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>
+ /// </signature>
+ },
+ 'each': function() {
+ /// <signature>
+ /// <summary>A generic iterator function, which can be used to seamlessly iterate over both objects and arrays. Arrays and array-like objects with a length property (such as a function's arguments object) are iterated by numeric index, from 0 to length-1. Other objects are iterated via their named properties.</summary>
+ /// <param name="collection" type="Object">The object or array to iterate over.</param>
+ /// <param name="callback(indexInArray, valueOfElement)" type="Function">The function that will be executed on every object.</param>
+ /// <returns type="Object" />
+ /// </signature>
+ },
+ 'error': function() {
+ /// <signature>
+ /// <summary>Takes a string and throws an exception containing it.</summary>
+ /// <param name="message" type="String">The message to send out.</param>
+ /// </signature>
+ },
+ 'extend': function() {
+ /// <signature>
+ /// <summary>Merge the contents of two or more objects together into the first object.</summary>
+ /// <param name="target" type="Object">An object that will receive the new properties if additional objects are passed in or that will extend the jQuery namespace if it is the sole argument.</param>
+ /// <param name="object1" type="Object">An object containing additional properties to merge in.</param>
+ /// <param name="objectN" type="Object">Additional objects containing properties to merge in.</param>
+ /// <returns type="Object" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Merge the contents of two or more objects together into the first object.</summary>
+ /// <param name="deep" type="Boolean">If true, the merge becomes recursive (aka. deep copy).</param>
+ /// <param name="target" type="Object">The object to extend. It will receive the new properties.</param>
+ /// <param name="object1" type="Object">An object containing additional properties to merge in.</param>
+ /// <param name="objectN" type="Object">Additional objects containing properties to merge in.</param>
+ /// <returns type="Object" />
+ /// </signature>
+ },
+ 'fn.extend': function() {
+ /// <signature>
+ /// <summary>Merge the contents of an object onto the jQuery prototype to provide new jQuery instance methods.</summary>
+ /// <param name="object" type="Object">An object to merge onto the jQuery prototype.</param>
+ /// <returns type="Object" />
+ /// </signature>
+ },
+ 'get': function() {
+ /// <signature>
+ /// <summary>Load data from the server using a HTTP GET request.</summary>
+ /// <param name="url" type="String">A string containing the URL to which the request is sent.</param>
+ /// <param name="data" type="">A plain object or string that is sent to the server with the request.</param>
+ /// <param name="success(data, textStatus, jqXHR)" type="Function">A callback function that is executed if the request succeeds.</param>
+ /// <param name="dataType" type="String">The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html).</param>
+ /// <returns type="jqXHR" />
+ /// </signature>
+ },
+ 'getJSON': function() {
+ /// <signature>
+ /// <summary>Load JSON-encoded data from the server using a GET HTTP request.</summary>
+ /// <param name="url" type="String">A string containing the URL to which the request is sent.</param>
+ /// <param name="data" type="PlainObject">A plain object or string that is sent to the server with the request.</param>
+ /// <param name="success(data, textStatus, jqXHR)" type="Function">A callback function that is executed if the request succeeds.</param>
+ /// <returns type="jqXHR" />
+ /// </signature>
+ },
+ 'getScript': function() {
+ /// <signature>
+ /// <summary>Load a JavaScript file from the server using a GET HTTP request, then execute it.</summary>
+ /// <param name="url" type="String">A string containing the URL to which the request is sent.</param>
+ /// <param name="success(script, textStatus, jqXHR)" type="Function">A callback function that is executed if the request succeeds.</param>
+ /// <returns type="jqXHR" />
+ /// </signature>
+ },
+ 'globalEval': function() {
+ /// <signature>
+ /// <summary>Execute some JavaScript code globally.</summary>
+ /// <param name="code" type="String">The JavaScript code to execute.</param>
+ /// </signature>
+ },
+ 'grep': function() {
+ /// <signature>
+ /// <summary>Finds the elements of an array which satisfy a filter function. The original array is not affected.</summary>
+ /// <param name="array" type="Array">The array to search through.</param>
+ /// <param name="function(elementOfArray, indexInArray)" type="Function">The function to process each item against. The first argument to the function is the item, and the second argument is the index. The function should return a Boolean value. this will be the global window object.</param>
+ /// <param name="invert" type="Boolean">If "invert" is false, or not provided, then the function returns an array consisting of all elements for which "callback" returns true. If "invert" is true, then the function returns an array consisting of all elements for which "callback" returns false.</param>
+ /// <returns type="Array" />
+ /// </signature>
+ },
+ 'hasData': function() {
+ /// <signature>
+ /// <summary>Determine whether an element has any jQuery data associated with it.</summary>
+ /// <param name="element" type="Element">A DOM element to be checked for data.</param>
+ /// <returns type="Boolean" />
+ /// </signature>
+ },
+ 'holdReady': function() {
+ /// <signature>
+ /// <summary>Holds or releases the execution of jQuery's ready event.</summary>
+ /// <param name="hold" type="Boolean">Indicates whether the ready hold is being requested or released</param>
+ /// </signature>
+ },
+ 'inArray': function() {
+ /// <signature>
+ /// <summary>Search for a specified value within an array and return its index (or -1 if not found).</summary>
+ /// <param name="value" type="Anything">The value to search for.</param>
+ /// <param name="array" type="Array">An array through which to search.</param>
+ /// <param name="fromIndex" type="Number">The index of the array at which to begin the search. The default is 0, which will search the whole array.</param>
+ /// <returns type="Number" />
+ /// </signature>
+ },
+ 'isArray': function() {
+ /// <signature>
+ /// <summary>Determine whether the argument is an array.</summary>
+ /// <param name="obj" type="Object">Object to test whether or not it is an array.</param>
+ /// <returns type="Boolean" />
+ /// </signature>
+ },
+ 'isEmptyObject': function() {
+ /// <signature>
+ /// <summary>Check to see if an object is empty (contains no enumerable properties).</summary>
+ /// <param name="object" type="Object">The object that will be checked to see if it's empty.</param>
+ /// <returns type="Boolean" />
+ /// </signature>
+ },
+ 'isFunction': function() {
+ /// <signature>
+ /// <summary>Determine if the argument passed is a Javascript function object.</summary>
+ /// <param name="obj" type="PlainObject">Object to test whether or not it is a function.</param>
+ /// <returns type="Boolean" />
+ /// </signature>
+ },
+ 'isNumeric': function() {
+ /// <signature>
+ /// <summary>Determines whether its argument is a number.</summary>
+ /// <param name="value" type="PlainObject">The value to be tested.</param>
+ /// <returns type="Boolean" />
+ /// </signature>
+ },
+ 'isPlainObject': function() {
+ /// <signature>
+ /// <summary>Check to see if an object is a plain object (created using "{}" or "new Object").</summary>
+ /// <param name="object" type="PlainObject">The object that will be checked to see if it's a plain object.</param>
+ /// <returns type="Boolean" />
+ /// </signature>
+ },
+ 'isWindow': function() {
+ /// <signature>
+ /// <summary>Determine whether the argument is a window.</summary>
+ /// <param name="obj" type="PlainObject">Object to test whether or not it is a window.</param>
+ /// <returns type="Boolean" />
+ /// </signature>
+ },
+ 'isXMLDoc': function() {
+ /// <signature>
+ /// <summary>Check to see if a DOM node is within an XML document (or is an XML document).</summary>
+ /// <param name="node" type="Element">The DOM node that will be checked to see if it's in an XML document.</param>
+ /// <returns type="Boolean" />
+ /// </signature>
+ },
+ 'makeArray': function() {
+ /// <signature>
+ /// <summary>Convert an array-like object into a true JavaScript array.</summary>
+ /// <param name="obj" type="PlainObject">Any object to turn into a native Array.</param>
+ /// <returns type="Array" />
+ /// </signature>
+ },
+ 'map': function() {
+ /// <signature>
+ /// <summary>Translate all items in an array or object to new array of items.</summary>
+ /// <param name="array" type="Array">The Array to translate.</param>
+ /// <param name="callback(elementOfArray, indexInArray)" type="Function">The function to process each item against. The first argument to the function is the array item, the second argument is the index in array The function can return any value. Within the function, this refers to the global (window) object.</param>
+ /// <returns type="Array" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Translate all items in an array or object to new array of items.</summary>
+ /// <param name="arrayOrObject" type="">The Array or Object to translate.</param>
+ /// <param name="callback( value, indexOrKey )" type="Function">The function to process each item against. The first argument to the function is the value; the second argument is the index or key of the array or object property. The function can return any value to add to the array. A returned array will be flattened into the resulting array. Within the function, this refers to the global (window) object.</param>
+ /// <returns type="Array" />
+ /// </signature>
+ },
+ 'merge': function() {
+ /// <signature>
+ /// <summary>Merge the contents of two arrays together into the first array.</summary>
+ /// <param name="first" type="Array">The first array to merge, the elements of second added.</param>
+ /// <param name="second" type="Array">The second array to merge into the first, unaltered.</param>
+ /// <returns type="Array" />
+ /// </signature>
+ },
+ 'noConflict': function() {
+ /// <signature>
+ /// <summary>Relinquish jQuery's control of the $ variable.</summary>
+ /// <param name="removeAll" type="Boolean">A Boolean indicating whether to remove all jQuery variables from the global scope (including jQuery itself).</param>
+ /// <returns type="Object" />
+ /// </signature>
+ },
+ 'noop': function() {
+ /// <summary>An empty function.</summary>
+ },
+ 'now': function() {
+ /// <summary>Return a number representing the current time.</summary>
+ /// <returns type="Number" />
+ },
+ 'param': function() {
+ /// <signature>
+ /// <summary>Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.</summary>
+ /// <param name="obj" type="">An array or object to serialize.</param>
+ /// <returns type="String" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request.</summary>
+ /// <param name="obj" type="">An array or object to serialize.</param>
+ /// <param name="traditional" type="Boolean">A Boolean indicating whether to perform a traditional "shallow" serialization.</param>
+ /// <returns type="String" />
+ /// </signature>
+ },
+ 'parseHTML': function() {
+ /// <signature>
+ /// <summary>Parses a string into an array of DOM nodes.</summary>
+ /// <param name="data" type="String">HTML string to be parsed</param>
+ /// <param name="context" type="Element">Document element to serve as the context in which the HTML fragment will be created</param>
+ /// <param name="keepScripts" type="Boolean">A Boolean indicating whether to include scripts passed in the HTML string</param>
+ /// <returns type="Array" />
+ /// </signature>
+ },
+ 'parseJSON': function() {
+ /// <signature>
+ /// <summary>Takes a well-formed JSON string and returns the resulting JavaScript object.</summary>
+ /// <param name="json" type="String">The JSON string to parse.</param>
+ /// <returns type="Object" />
+ /// </signature>
+ },
+ 'parseXML': function() {
+ /// <signature>
+ /// <summary>Parses a string into an XML document.</summary>
+ /// <param name="data" type="String">a well-formed XML string to be parsed</param>
+ /// <returns type="XMLDocument" />
+ /// </signature>
+ },
+ 'post': function() {
+ /// <signature>
+ /// <summary>Load data from the server using a HTTP POST request.</summary>
+ /// <param name="url" type="String">A string containing the URL to which the request is sent.</param>
+ /// <param name="data" type="">A plain object or string that is sent to the server with the request.</param>
+ /// <param name="success(data, textStatus, jqXHR)" type="Function">A callback function that is executed if the request succeeds. Required if dataType is provided, but can be null in that case.</param>
+ /// <param name="dataType" type="String">The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html).</param>
+ /// <returns type="jqXHR" />
+ /// </signature>
+ },
+ 'proxy': function() {
+ /// <signature>
+ /// <summary>Takes a function and returns a new one that will always have a particular context.</summary>
+ /// <param name="function" type="Function">The function whose context will be changed.</param>
+ /// <param name="context" type="PlainObject">The object to which the context (this) of the function should be set.</param>
+ /// <returns type="Function" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Takes a function and returns a new one that will always have a particular context.</summary>
+ /// <param name="context" type="PlainObject">The object to which the context of the function should be set.</param>
+ /// <param name="name" type="String">The name of the function whose context will be changed (should be a property of the context object).</param>
+ /// <returns type="Function" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Takes a function and returns a new one that will always have a particular context.</summary>
+ /// <param name="function" type="Function">The function whose context will be changed.</param>
+ /// <param name="context" type="PlainObject">The object to which the context (this) of the function should be set.</param>
+ /// <param name="additionalArguments" type="Anything">Any number of arguments to be passed to the function referenced in the function argument.</param>
+ /// <returns type="Function" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Takes a function and returns a new one that will always have a particular context.</summary>
+ /// <param name="context" type="PlainObject">The object to which the context of the function should be set.</param>
+ /// <param name="name" type="String">The name of the function whose context will be changed (should be a property of the context object).</param>
+ /// <param name="additionalArguments" type="Anything">Any number of arguments to be passed to the function named in the name argument.</param>
+ /// <returns type="Function" />
+ /// </signature>
+ },
+ 'queue': function() {
+ /// <signature>
+ /// <summary>Manipulate the queue of functions to be executed on the matched element.</summary>
+ /// <param name="element" type="Element">A DOM element where the array of queued functions is attached.</param>
+ /// <param name="queueName" type="String">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>
+ /// <param name="newQueue" type="Array">An array of functions to replace the current queue contents.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Manipulate the queue of functions to be executed on the matched element.</summary>
+ /// <param name="element" type="Element">A DOM element on which to add a queued function.</param>
+ /// <param name="queueName" type="String">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>
+ /// <param name="callback()" type="Function">The new function to add to the queue.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'removeData': function() {
+ /// <signature>
+ /// <summary>Remove a previously-stored piece of data.</summary>
+ /// <param name="element" type="Element">A DOM element from which to remove data.</param>
+ /// <param name="name" type="String">A string naming the piece of data to remove.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'sub': function() {
+ /// <summary>Creates a new copy of jQuery whose properties and methods can be modified without affecting the original jQuery object.</summary>
+ /// <returns type="jQuery" />
+ },
+ 'support': function() {
+ /// <summary>A collection of properties that represent the presence of different browser features or bugs. Primarily intended for jQuery's internal use; specific properties may be removed when they are no longer needed internally to improve page startup performance.</summary>
+ /// <returns type="Object" />
+ },
+ 'trim': function() {
+ /// <signature>
+ /// <summary>Remove the whitespace from the beginning and end of a string.</summary>
+ /// <param name="str" type="String">The string to trim.</param>
+ /// <returns type="String" />
+ /// </signature>
+ },
+ 'type': function() {
+ /// <signature>
+ /// <summary>Determine the internal JavaScript [[Class]] of an object.</summary>
+ /// <param name="obj" type="PlainObject">Object to get the internal JavaScript [[Class]] of.</param>
+ /// <returns type="String" />
+ /// </signature>
+ },
+ 'unique': function() {
+ /// <signature>
+ /// <summary>Sorts an array of DOM elements, in place, with the duplicates removed. Note that this only works on arrays of DOM elements, not strings or numbers.</summary>
+ /// <param name="array" type="Array">The Array of DOM elements.</param>
+ /// <returns type="Array" />
+ /// </signature>
+ },
+ 'when': function() {
+ /// <signature>
+ /// <summary>Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events.</summary>
+ /// <param name="deferreds" type="Deferred">One or more Deferred objects, or plain JavaScript objects.</param>
+ /// <returns type="Promise" />
+ /// </signature>
+ },
+});
+
+var _1228819969 = jQuery.Callbacks;
+jQuery.Callbacks = function(flags) {
+var _object = _1228819969(flags);
+intellisense.annotate(_object, {
+ 'add': function() {
+ /// <signature>
+ /// <summary>Add a callback or a collection of callbacks to a callback list.</summary>
+ /// <param name="callbacks" type="">A function, or array of functions, that are to be added to the callback list.</param>
+ /// <returns type="Callbacks" />
+ /// </signature>
+ },
+ 'disable': function() {
+ /// <summary>Disable a callback list from doing anything more.</summary>
+ /// <returns type="Callbacks" />
+ },
+ 'disabled': function() {
+ /// <summary>Determine if the callbacks list has been disabled.</summary>
+ /// <returns type="Boolean" />
+ },
+ 'empty': function() {
+ /// <summary>Remove all of the callbacks from a list.</summary>
+ /// <returns type="Callbacks" />
+ },
+ 'fire': function() {
+ /// <signature>
+ /// <summary>Call all of the callbacks with the given arguments</summary>
+ /// <param name="arguments" type="Anything">The argument or list of arguments to pass back to the callback list.</param>
+ /// <returns type="Callbacks" />
+ /// </signature>
+ },
+ 'fired': function() {
+ /// <summary>Determine if the callbacks have already been called at least once.</summary>
+ /// <returns type="Boolean" />
+ },
+ 'fireWith': function() {
+ /// <signature>
+ /// <summary>Call all callbacks in a list with the given context and arguments.</summary>
+ /// <param name="context" type="">A reference to the context in which the callbacks in the list should be fired.</param>
+ /// <param name="args" type="">An argument, or array of arguments, to pass to the callbacks in the list.</param>
+ /// <returns type="Callbacks" />
+ /// </signature>
+ },
+ 'has': function() {
+ /// <signature>
+ /// <summary>Determine whether a supplied callback is in a list</summary>
+ /// <param name="callback" type="Function">The callback to search for.</param>
+ /// <returns type="Boolean" />
+ /// </signature>
+ },
+ 'lock': function() {
+ /// <summary>Lock a callback list in its current state.</summary>
+ /// <returns type="Callbacks" />
+ },
+ 'locked': function() {
+ /// <summary>Determine if the callbacks list has been locked.</summary>
+ /// <returns type="Boolean" />
+ },
+ 'remove': function() {
+ /// <signature>
+ /// <summary>Remove a callback or a collection of callbacks from a callback list.</summary>
+ /// <param name="callbacks" type="">A function, or array of functions, that are to be removed from the callback list.</param>
+ /// <returns type="Callbacks" />
+ /// </signature>
+ },
+});
+
+return _object;
+};
+intellisense.redirectDefinition(jQuery.Callbacks, _1228819969);
+
+var _731531622 = jQuery.Deferred;
+jQuery.Deferred = function(func) {
+var _object = _731531622(func);
+intellisense.annotate(_object, {
+ 'always': function() {
+ /// <signature>
+ /// <summary>Add handlers to be called when the Deferred object is either resolved or rejected.</summary>
+ /// <param name="alwaysCallbacks" type="Function">A function, or array of functions, that is called when the Deferred is resolved or rejected.</param>
+ /// <param name="alwaysCallbacks" type="Function">Optional additional functions, or arrays of functions, that are called when the Deferred is resolved or rejected.</param>
+ /// <returns type="Deferred" />
+ /// </signature>
+ },
+ 'done': function() {
+ /// <signature>
+ /// <summary>Add handlers to be called when the Deferred object is resolved.</summary>
+ /// <param name="doneCallbacks" type="Function">A function, or array of functions, that are called when the Deferred is resolved.</param>
+ /// <param name="doneCallbacks" type="Function">Optional additional functions, or arrays of functions, that are called when the Deferred is resolved.</param>
+ /// <returns type="Deferred" />
+ /// </signature>
+ },
+ 'fail': function() {
+ /// <signature>
+ /// <summary>Add handlers to be called when the Deferred object is rejected.</summary>
+ /// <param name="failCallbacks" type="Function">A function, or array of functions, that are called when the Deferred is rejected.</param>
+ /// <param name="failCallbacks" type="Function">Optional additional functions, or arrays of functions, that are called when the Deferred is rejected.</param>
+ /// <returns type="Deferred" />
+ /// </signature>
+ },
+ 'isRejected': function() {
+ /// <summary>Determine whether a Deferred object has been rejected.</summary>
+ /// <returns type="Boolean" />
+ },
+ 'isResolved': function() {
+ /// <summary>Determine whether a Deferred object has been resolved.</summary>
+ /// <returns type="Boolean" />
+ },
+ 'notify': function() {
+ /// <signature>
+ /// <summary>Call the progressCallbacks on a Deferred object with the given args.</summary>
+ /// <param name="args" type="Object">Optional arguments that are passed to the progressCallbacks.</param>
+ /// <returns type="Deferred" />
+ /// </signature>
+ },
+ 'notifyWith': function() {
+ /// <signature>
+ /// <summary>Call the progressCallbacks on a Deferred object with the given context and args.</summary>
+ /// <param name="context" type="Object">Context passed to the progressCallbacks as the this object.</param>
+ /// <param name="args" type="Object">Optional arguments that are passed to the progressCallbacks.</param>
+ /// <returns type="Deferred" />
+ /// </signature>
+ },
+ 'pipe': function() {
+ /// <signature>
+ /// <summary>Utility method to filter and/or chain Deferreds.</summary>
+ /// <param name="doneFilter" type="Function">An optional function that is called when the Deferred is resolved.</param>
+ /// <param name="failFilter" type="Function">An optional function that is called when the Deferred is rejected.</param>
+ /// <returns type="Promise" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Utility method to filter and/or chain Deferreds.</summary>
+ /// <param name="doneFilter" type="Function">An optional function that is called when the Deferred is resolved.</param>
+ /// <param name="failFilter" type="Function">An optional function that is called when the Deferred is rejected.</param>
+ /// <param name="progressFilter" type="Function">An optional function that is called when progress notifications are sent to the Deferred.</param>
+ /// <returns type="Promise" />
+ /// </signature>
+ },
+ 'progress': function() {
+ /// <signature>
+ /// <summary>Add handlers to be called when the Deferred object generates progress notifications.</summary>
+ /// <param name="progressCallbacks" type="">A function, or array of functions, to be called when the Deferred generates progress notifications.</param>
+ /// <returns type="Deferred" />
+ /// </signature>
+ },
+ 'promise': function() {
+ /// <signature>
+ /// <summary>Return a Deferred's Promise object.</summary>
+ /// <param name="target" type="Object">Object onto which the promise methods have to be attached</param>
+ /// <returns type="Promise" />
+ /// </signature>
+ },
+ 'reject': function() {
+ /// <signature>
+ /// <summary>Reject a Deferred object and call any failCallbacks with the given args.</summary>
+ /// <param name="args" type="Anything">Optional arguments that are passed to the failCallbacks.</param>
+ /// <returns type="Deferred" />
+ /// </signature>
+ },
+ 'rejectWith': function() {
+ /// <signature>
+ /// <summary>Reject a Deferred object and call any failCallbacks with the given context and args.</summary>
+ /// <param name="context" type="Object">Context passed to the failCallbacks as the this object.</param>
+ /// <param name="args" type="Array">An optional array of arguments that are passed to the failCallbacks.</param>
+ /// <returns type="Deferred" />
+ /// </signature>
+ },
+ 'resolve': function() {
+ /// <signature>
+ /// <summary>Resolve a Deferred object and call any doneCallbacks with the given args.</summary>
+ /// <param name="args" type="Anything">Optional arguments that are passed to the doneCallbacks.</param>
+ /// <returns type="Deferred" />
+ /// </signature>
+ },
+ 'resolveWith': function() {
+ /// <signature>
+ /// <summary>Resolve a Deferred object and call any doneCallbacks with the given context and args.</summary>
+ /// <param name="context" type="Object">Context passed to the doneCallbacks as the this object.</param>
+ /// <param name="args" type="Array">An optional array of arguments that are passed to the doneCallbacks.</param>
+ /// <returns type="Deferred" />
+ /// </signature>
+ },
+ 'state': function() {
+ /// <summary>Determine the current state of a Deferred object.</summary>
+ /// <returns type="String" />
+ },
+ 'then': function() {
+ /// <signature>
+ /// <summary>Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.</summary>
+ /// <param name="doneFilter" type="Function">A function that is called when the Deferred is resolved.</param>
+ /// <param name="failFilter" type="Function">An optional function that is called when the Deferred is rejected.</param>
+ /// <param name="progressFilter" type="Function">An optional function that is called when progress notifications are sent to the Deferred.</param>
+ /// <returns type="Promise" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.</summary>
+ /// <param name="doneCallbacks" type="Function">A function, or array of functions, called when the Deferred is resolved.</param>
+ /// <param name="failCallbacks" type="Function">A function, or array of functions, called when the Deferred is rejected.</param>
+ /// <returns type="Promise" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Add handlers to be called when the Deferred object is resolved, rejected, or still in progress.</summary>
+ /// <param name="doneCallbacks" type="Function">A function, or array of functions, called when the Deferred is resolved.</param>
+ /// <param name="failCallbacks" type="Function">A function, or array of functions, called when the Deferred is rejected.</param>
+ /// <param name="progressCallbacks" type="Function">A function, or array of functions, called when the Deferred notifies progress.</param>
+ /// <returns type="Promise" />
+ /// </signature>
+ },
+});
+
+return _object;
+};
+intellisense.redirectDefinition(jQuery.Callbacks, _731531622);
+
+intellisense.annotate(jQuery.Event.prototype, {
+ 'currentTarget': function() {
+ /// <summary>The current DOM element within the event bubbling phase.</summary>
+ /// <returns type="Element" />
+ },
+ 'data': function() {
+ /// <summary>An optional object of data passed to an event method when the current executing handler is bound.</summary>
+ /// <returns type="Object" />
+ },
+ 'delegateTarget': function() {
+ /// <summary>The element where the currently-called jQuery event handler was attached.</summary>
+ /// <returns type="Element" />
+ },
+ 'isDefaultPrevented': function() {
+ /// <summary>Returns whether event.preventDefault() was ever called on this event object.</summary>
+ /// <returns type="Boolean" />
+ },
+ 'isImmediatePropagationStopped': function() {
+ /// <summary>Returns whether event.stopImmediatePropagation() was ever called on this event object.</summary>
+ /// <returns type="Boolean" />
+ },
+ 'isPropagationStopped': function() {
+ /// <summary>Returns whether event.stopPropagation() was ever called on this event object.</summary>
+ /// <returns type="Boolean" />
+ },
+ 'metaKey': function() {
+ /// <summary>Indicates whether the META key was pressed when the event fired.</summary>
+ /// <returns type="Boolean" />
+ },
+ 'namespace': function() {
+ /// <summary>The namespace specified when the event was triggered.</summary>
+ /// <returns type="String" />
+ },
+ 'pageX': function() {
+ /// <summary>The mouse position relative to the left edge of the document.</summary>
+ /// <returns type="Number" />
+ },
+ 'pageY': function() {
+ /// <summary>The mouse position relative to the top edge of the document.</summary>
+ /// <returns type="Number" />
+ },
+ 'preventDefault': function() {
+ /// <summary>If this method is called, the default action of the event will not be triggered.</summary>
+ },
+ 'relatedTarget': function() {
+ /// <summary>The other DOM element involved in the event, if any.</summary>
+ /// <returns type="Element" />
+ },
+ 'result': function() {
+ /// <summary>The last value returned by an event handler that was triggered by this event, unless the value was undefined.</summary>
+ /// <returns type="Object" />
+ },
+ 'stopImmediatePropagation': function() {
+ /// <summary>Keeps the rest of the handlers from being executed and prevents the event from bubbling up the DOM tree.</summary>
+ },
+ 'stopPropagation': function() {
+ /// <summary>Prevents the event from bubbling up the DOM tree, preventing any parent handlers from being notified of the event.</summary>
+ },
+ 'target': function() {
+ /// <summary>The DOM element that initiated the event.</summary>
+ /// <returns type="Element" />
+ },
+ 'timeStamp': function() {
+ /// <summary>The difference in milliseconds between the time the browser created the event and January 1, 1970.</summary>
+ /// <returns type="Number" />
+ },
+ 'type': function() {
+ /// <summary>Describes the nature of the event.</summary>
+ /// <returns type="String" />
+ },
+ 'which': function() {
+ /// <summary>For key or mouse events, this property indicates the specific key or button that was pressed.</summary>
+ /// <returns type="Number" />
+ },
+});
+
+intellisense.annotate(jQuery.fn, {
+ 'add': function() {
+ /// <signature>
+ /// <summary>Add elements to the set of matched elements.</summary>
+ /// <param name="selector" type="String">A string representing a selector expression to find additional elements to add to the set of matched elements.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Add elements to the set of matched elements.</summary>
+ /// <param name="elements" type="Array">One or more elements to add to the set of matched elements.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Add elements to the set of matched elements.</summary>
+ /// <param name="html" type="htmlString">An HTML fragment to add to the set of matched elements.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Add elements to the set of matched elements.</summary>
+ /// <param name="jQuery object" type="jQuery object ">An existing jQuery object to add to the set of matched elements.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Add elements to the set of matched elements.</summary>
+ /// <param name="selector" type="String">A string representing a selector expression to find additional elements to add to the set of matched elements.</param>
+ /// <param name="context" type="Element">The point in the document at which the selector should begin matching; similar to the context argument of the $(selector, context) method.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'addBack': function() {
+ /// <signature>
+ /// <summary>Add the previous set of elements on the stack to the current set, optionally filtered by a selector.</summary>
+ /// <param name="selector" type="String">A string containing a selector expression to match the current set of elements against.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'addClass': function() {
+ /// <signature>
+ /// <summary>Adds the specified class(es) to each of the set of matched elements.</summary>
+ /// <param name="className" type="String">One or more space-separated classes to be added to the class attribute of each matched element.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Adds the specified class(es) to each of the set of matched elements.</summary>
+ /// <param name="function(index, currentClass)" type="Function">A function returning one or more space-separated class names to be added to the existing class name(s). Receives the index position of the element in the set and the existing class name(s) as arguments. Within the function, this refers to the current element in the set.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'after': function() {
+ /// <signature>
+ /// <summary>Insert content, specified by the parameter, after each element in the set of matched elements.</summary>
+ /// <param name="content" type="">HTML string, DOM element, or jQuery object to insert after each element in the set of matched elements.</param>
+ /// <param name="content" type="">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert after each element in the set of matched elements.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Insert content, specified by the parameter, after each element in the set of matched elements.</summary>
+ /// <param name="function(index)" type="Function">A function that returns an HTML string, DOM element(s), or jQuery object to insert after each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'ajaxComplete': function() {
+ /// <signature>
+ /// <summary>Register a handler to be called when Ajax requests complete. This is an AjaxEvent.</summary>
+ /// <param name="handler(event, XMLHttpRequest, ajaxOptions)" type="Function">The function to be invoked.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'ajaxError': function() {
+ /// <signature>
+ /// <summary>Register a handler to be called when Ajax requests complete with an error. This is an Ajax Event.</summary>
+ /// <param name="handler(event, jqXHR, ajaxSettings, thrownError)" type="Function">The function to be invoked.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'ajaxSend': function() {
+ /// <signature>
+ /// <summary>Attach a function to be executed before an Ajax request is sent. This is an Ajax Event.</summary>
+ /// <param name="handler(event, jqXHR, ajaxOptions)" type="Function">The function to be invoked.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'ajaxStart': function() {
+ /// <signature>
+ /// <summary>Register a handler to be called when the first Ajax request begins. This is an Ajax Event.</summary>
+ /// <param name="handler()" type="Function">The function to be invoked.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'ajaxStop': function() {
+ /// <signature>
+ /// <summary>Register a handler to be called when all Ajax requests have completed. This is an Ajax Event.</summary>
+ /// <param name="handler()" type="Function">The function to be invoked.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'ajaxSuccess': function() {
+ /// <signature>
+ /// <summary>Attach a function to be executed whenever an Ajax request completes successfully. This is an Ajax Event.</summary>
+ /// <param name="handler(event, XMLHttpRequest, ajaxOptions)" type="Function">The function to be invoked.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'all': function() {
+ /// <summary>Selects all elements.</summary>
+ },
+ 'andSelf': function() {
+ /// <summary>Add the previous set of elements on the stack to the current set.</summary>
+ /// <returns type="jQuery" />
+ },
+ 'animate': function() {
+ /// <signature>
+ /// <summary>Perform a custom animation of a set of CSS properties.</summary>
+ /// <param name="properties" type="PlainObject">An object of CSS properties and values that the animation will move toward.</param>
+ /// <param name="duration" type="">A string or number determining how long the animation will run.</param>
+ /// <param name="easing" type="String">A string indicating which easing function to use for the transition.</param>
+ /// <param name="complete" type="Function">A function to call once the animation is complete.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Perform a custom animation of a set of CSS properties.</summary>
+ /// <param name="properties" type="PlainObject">An object of CSS properties and values that the animation will move toward.</param>
+ /// <param name="options" type="PlainObject">A map of additional options to pass to the method.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'animated': function() {
+ /// <summary>Select all elements that are in the progress of an animation at the time the selector is run.</summary>
+ },
+ 'append': function() {
+ /// <signature>
+ /// <summary>Insert content, specified by the parameter, to the end of each element in the set of matched elements.</summary>
+ /// <param name="content" type="">DOM element, HTML string, or jQuery object to insert at the end of each element in the set of matched elements.</param>
+ /// <param name="content" type="">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the end of each element in the set of matched elements.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Insert content, specified by the parameter, to the end of each element in the set of matched elements.</summary>
+ /// <param name="function(index, html)" type="Function">A function that returns an HTML string, DOM element(s), or jQuery object to insert at the end of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'appendTo': function() {
+ /// <signature>
+ /// <summary>Insert every element in the set of matched elements to the end of the target.</summary>
+ /// <param name="target" type="">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the end of the element(s) specified by this parameter.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'attr': function() {
+ /// <signature>
+ /// <summary>Set one or more attributes for the set of matched elements.</summary>
+ /// <param name="attributeName" type="String">The name of the attribute to set.</param>
+ /// <param name="value" type="">A value to set for the attribute.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Set one or more attributes for the set of matched elements.</summary>
+ /// <param name="attributes" type="PlainObject">An object of attribute-value pairs to set.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Set one or more attributes for the set of matched elements.</summary>
+ /// <param name="attributeName" type="String">The name of the attribute to set.</param>
+ /// <param name="function(index, attr)" type="Function">A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old attribute value as arguments.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'attributeContains': function() {
+ /// <signature>
+ /// <summary>Selects elements that have the specified attribute with a value containing the a given substring.</summary>
+ /// <param name="attribute" type="String">An attribute name.</param>
+ /// <param name="value" type="String">An attribute value. Can be either an unquoted single word or a quoted string.</param>
+ /// </signature>
+ },
+ 'attributeContainsPrefix': function() {
+ /// <signature>
+ /// <summary>Selects elements that have the specified attribute with a value either equal to a given string or starting with that string followed by a hyphen (-).</summary>
+ /// <param name="attribute" type="String">An attribute name.</param>
+ /// <param name="value" type="String">An attribute value. Can be either an unquoted single word or a quoted string.</param>
+ /// </signature>
+ },
+ 'attributeContainsWord': function() {
+ /// <signature>
+ /// <summary>Selects elements that have the specified attribute with a value containing a given word, delimited by spaces.</summary>
+ /// <param name="attribute" type="String">An attribute name.</param>
+ /// <param name="value" type="String">An attribute value. Can be either an unquoted single word or a quoted string.</param>
+ /// </signature>
+ },
+ 'attributeEndsWith': function() {
+ /// <signature>
+ /// <summary>Selects elements that have the specified attribute with a value ending exactly with a given string. The comparison is case sensitive.</summary>
+ /// <param name="attribute" type="String">An attribute name.</param>
+ /// <param name="value" type="String">An attribute value. Can be either an unquoted single word or a quoted string.</param>
+ /// </signature>
+ },
+ 'attributeEquals': function() {
+ /// <signature>
+ /// <summary>Selects elements that have the specified attribute with a value exactly equal to a certain value.</summary>
+ /// <param name="attribute" type="String">An attribute name.</param>
+ /// <param name="value" type="String">An attribute value. Can be either an unquoted single word or a quoted string.</param>
+ /// </signature>
+ },
+ 'attributeHas': function() {
+ /// <signature>
+ /// <summary>Selects elements that have the specified attribute, with any value.</summary>
+ /// <param name="attribute" type="String">An attribute name.</param>
+ /// </signature>
+ },
+ 'attributeMultiple': function() {
+ /// <signature>
+ /// <summary>Matches elements that match all of the specified attribute filters.</summary>
+ /// <param name="attributeFilter1" type="String">An attribute filter.</param>
+ /// <param name="attributeFilter2" type="String">Another attribute filter, reducing the selection even more</param>
+ /// <param name="attributeFilterN" type="String">As many more attribute filters as necessary</param>
+ /// </signature>
+ },
+ 'attributeNotEqual': function() {
+ /// <signature>
+ /// <summary>Select elements that either don't have the specified attribute, or do have the specified attribute but not with a certain value.</summary>
+ /// <param name="attribute" type="String">An attribute name.</param>
+ /// <param name="value" type="String">An attribute value. Can be either an unquoted single word or a quoted string.</param>
+ /// </signature>
+ },
+ 'attributeStartsWith': function() {
+ /// <signature>
+ /// <summary>Selects elements that have the specified attribute with a value beginning exactly with a given string.</summary>
+ /// <param name="attribute" type="String">An attribute name.</param>
+ /// <param name="value" type="String">An attribute value. Can be either an unquoted single word or a quoted string.</param>
+ /// </signature>
+ },
+ 'before': function() {
+ /// <signature>
+ /// <summary>Insert content, specified by the parameter, before each element in the set of matched elements.</summary>
+ /// <param name="content" type="">HTML string, DOM element, or jQuery object to insert before each element in the set of matched elements.</param>
+ /// <param name="content" type="">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert before each element in the set of matched elements.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Insert content, specified by the parameter, before each element in the set of matched elements.</summary>
+ /// <param name="function" type="Function">A function that returns an HTML string, DOM element(s), or jQuery object to insert before each element in the set of matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'bind': function() {
+ /// <signature>
+ /// <summary>Attach a handler to an event for the elements.</summary>
+ /// <param name="eventType" type="String">A string containing one or more DOM event types, such as "click" or "submit," or custom event names.</param>
+ /// <param name="eventData" type="Object">An object containing data that will be passed to the event handler.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Attach a handler to an event for the elements.</summary>
+ /// <param name="eventType" type="String">A string containing one or more DOM event types, such as "click" or "submit," or custom event names.</param>
+ /// <param name="eventData" type="Object">An object containing data that will be passed to the event handler.</param>
+ /// <param name="preventBubble" type="Boolean">Setting the third argument to false will attach a function that prevents the default action from occurring and stops the event from bubbling. The default is true.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Attach a handler to an event for the elements.</summary>
+ /// <param name="events" type="Object">An object containing one or more DOM event types and functions to execute for them.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'blur': function() {
+ /// <signature>
+ /// <summary>Bind an event handler to the "blur" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Bind an event handler to the "blur" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="eventData" type="Object">An object containing data that will be passed to the event handler.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'button': function() {
+ /// <summary>Selects all button elements and elements of type button.</summary>
+ },
+ 'change': function() {
+ /// <signature>
+ /// <summary>Bind an event handler to the "change" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Bind an event handler to the "change" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="eventData" type="Object">An object containing data that will be passed to the event handler.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'checkbox': function() {
+ /// <summary>Selects all elements of type checkbox.</summary>
+ },
+ 'checked': function() {
+ /// <summary>Matches all elements that are checked or selected.</summary>
+ },
+ 'child': function() {
+ /// <signature>
+ /// <summary>Selects all direct child elements specified by "child" of elements specified by "parent".</summary>
+ /// <param name="parent" type="String">Any valid selector.</param>
+ /// <param name="child" type="String">A selector to filter the child elements.</param>
+ /// </signature>
+ },
+ 'children': function() {
+ /// <signature>
+ /// <summary>Get the children of each element in the set of matched elements, optionally filtered by a selector.</summary>
+ /// <param name="selector" type="String">A string containing a selector expression to match elements against.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'class': function() {
+ /// <signature>
+ /// <summary>Selects all elements with the given class.</summary>
+ /// <param name="class" type="String">A class to search for. An element can have multiple classes; only one of them must match.</param>
+ /// </signature>
+ },
+ 'clearQueue': function() {
+ /// <signature>
+ /// <summary>Remove from the queue all items that have not yet been run.</summary>
+ /// <param name="queueName" type="String">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'click': function() {
+ /// <signature>
+ /// <summary>Bind an event handler to the "click" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Bind an event handler to the "click" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="eventData" type="Object">An object containing data that will be passed to the event handler.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'clone': function() {
+ /// <signature>
+ /// <summary>Create a deep copy of the set of matched elements.</summary>
+ /// <param name="withDataAndEvents" type="Boolean">A Boolean indicating whether event handlers should be copied along with the elements. As of jQuery 1.4, element data will be copied as well.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Create a deep copy of the set of matched elements.</summary>
+ /// <param name="withDataAndEvents" type="Boolean">A Boolean indicating whether event handlers and data should be copied along with the elements. The default value is false. *In jQuery 1.5.0 the default value was incorrectly true; it was changed back to false in 1.5.1 and up.</param>
+ /// <param name="deepWithDataAndEvents" type="Boolean">A Boolean indicating whether event handlers and data for all children of the cloned element should be copied. By default its value matches the first argument's value (which defaults to false).</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'closest': function() {
+ /// <signature>
+ /// <summary>For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.</summary>
+ /// <param name="selector" type="String">A string containing a selector expression to match elements against.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.</summary>
+ /// <param name="selector" type="String">A string containing a selector expression to match elements against.</param>
+ /// <param name="context" type="Element">A DOM element within which a matching element may be found. If no context is passed in then the context of the jQuery set will be used instead.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.</summary>
+ /// <param name="jQuery object" type="jQuery">A jQuery object to match elements against.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.</summary>
+ /// <param name="element" type="Element">An element to match elements against.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'contains': function() {
+ /// <signature>
+ /// <summary>Select all elements that contain the specified text.</summary>
+ /// <param name="text" type="String">A string of text to look for. It's case sensitive.</param>
+ /// </signature>
+ },
+ 'contents': function() {
+ /// <summary>Get the children of each element in the set of matched elements, including text and comment nodes.</summary>
+ /// <returns type="jQuery" />
+ },
+ 'context': function() {
+ /// <summary>The DOM node context originally passed to jQuery(); if none was passed then context will likely be the document.</summary>
+ /// <returns type="Element" />
+ },
+ 'css': function() {
+ /// <signature>
+ /// <summary>Set one or more CSS properties for the set of matched elements.</summary>
+ /// <param name="propertyName" type="String">A CSS property name.</param>
+ /// <param name="value" type="">A value to set for the property.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Set one or more CSS properties for the set of matched elements.</summary>
+ /// <param name="propertyName" type="String">A CSS property name.</param>
+ /// <param name="function(index, value)" type="Function">A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Set one or more CSS properties for the set of matched elements.</summary>
+ /// <param name="properties" type="PlainObject">An object of property-value pairs to set.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'data': function() {
+ /// <signature>
+ /// <summary>Store arbitrary data associated with the matched elements.</summary>
+ /// <param name="key" type="String">A string naming the piece of data to set.</param>
+ /// <param name="value" type="Object">The new data value; it can be any Javascript type including Array or Object.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Store arbitrary data associated with the matched elements.</summary>
+ /// <param name="obj" type="Object">An object of key-value pairs of data to update.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'dblclick': function() {
+ /// <signature>
+ /// <summary>Bind an event handler to the "dblclick" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Bind an event handler to the "dblclick" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="eventData" type="Object">An object containing data that will be passed to the event handler.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'delay': function() {
+ /// <signature>
+ /// <summary>Set a timer to delay execution of subsequent items in the queue.</summary>
+ /// <param name="duration" type="Number">An integer indicating the number of milliseconds to delay execution of the next item in the queue.</param>
+ /// <param name="queueName" type="String">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'delegate': function() {
+ /// <signature>
+ /// <summary>Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements.</summary>
+ /// <param name="selector" type="String">A selector to filter the elements that trigger the event.</param>
+ /// <param name="eventType" type="String">A string containing one or more space-separated JavaScript event types, such as "click" or "keydown," or custom event names.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute at the time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements.</summary>
+ /// <param name="selector" type="String">A selector to filter the elements that trigger the event.</param>
+ /// <param name="eventType" type="String">A string containing one or more space-separated JavaScript event types, such as "click" or "keydown," or custom event names.</param>
+ /// <param name="eventData" type="Object">An object containing data that will be passed to the event handler.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute at the time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements.</summary>
+ /// <param name="selector" type="String">A selector to filter the elements that trigger the event.</param>
+ /// <param name="events" type="PlainObject">A plain object of one or more event types and functions to execute for them.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'dequeue': function() {
+ /// <signature>
+ /// <summary>Execute the next function on the queue for the matched elements.</summary>
+ /// <param name="queueName" type="String">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'descendant': function() {
+ /// <signature>
+ /// <summary>Selects all elements that are descendants of a given ancestor.</summary>
+ /// <param name="ancestor" type="String">Any valid selector.</param>
+ /// <param name="descendant" type="String">A selector to filter the descendant elements.</param>
+ /// </signature>
+ },
+ 'detach': function() {
+ /// <signature>
+ /// <summary>Remove the set of matched elements from the DOM.</summary>
+ /// <param name="selector" type="String">A selector expression that filters the set of matched elements to be removed.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'die': function() {
+ /// <signature>
+ /// <summary>Remove event handlers previously attached using .live() from the elements.</summary>
+ /// <param name="eventType" type="String">A string containing a JavaScript event type, such as click or keydown.</param>
+ /// <param name="handler" type="String">The function that is no longer to be executed.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Remove event handlers previously attached using .live() from the elements.</summary>
+ /// <param name="events" type="PlainObject">A plain object of one or more event types, such as click or keydown and their corresponding functions that are no longer to be executed.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'disabled': function() {
+ /// <summary>Selects all elements that are disabled.</summary>
+ },
+ 'each': function() {
+ /// <signature>
+ /// <summary>Iterate over a jQuery object, executing a function for each matched element.</summary>
+ /// <param name="function(index, Element)" type="Function">A function to execute for each matched element.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'element': function() {
+ /// <signature>
+ /// <summary>Selects all elements with the given tag name.</summary>
+ /// <param name="element" type="String">An element to search for. Refers to the tagName of DOM nodes.</param>
+ /// </signature>
+ },
+ 'empty': function() {
+ /// <summary>Select all elements that have no children (including text nodes).</summary>
+ },
+ 'enabled': function() {
+ /// <summary>Selects all elements that are enabled.</summary>
+ },
+ 'end': function() {
+ /// <summary>End the most recent filtering operation in the current chain and return the set of matched elements to its previous state.</summary>
+ /// <returns type="jQuery" />
+ },
+ 'eq': function() {
+ /// <signature>
+ /// <summary>Select the element at index n within the matched set.</summary>
+ /// <param name="index" type="Number">Zero-based index of the element to match.</param>
+ /// </signature>
+ /// <signature>
+ /// <summary>Select the element at index n within the matched set.</summary>
+ /// <param name="-index" type="Number">Zero-based index of the element to match, counting backwards from the last element.</param>
+ /// </signature>
+ },
+ 'error': function() {
+ /// <signature>
+ /// <summary>Bind an event handler to the "error" JavaScript event.</summary>
+ /// <param name="handler(eventObject)" type="Function">A function to execute when the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Bind an event handler to the "error" JavaScript event.</summary>
+ /// <param name="eventData" type="Object">An object containing data that will be passed to the event handler.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'even': function() {
+ /// <summary>Selects even elements, zero-indexed. See also odd.</summary>
+ },
+ 'fadeIn': function() {
+ /// <signature>
+ /// <summary>Display the matched elements by fading them to opaque.</summary>
+ /// <param name="duration" type="">A string or number determining how long the animation will run.</param>
+ /// <param name="complete" type="Function">A function to call once the animation is complete.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Display the matched elements by fading them to opaque.</summary>
+ /// <param name="options" type="PlainObject">A map of additional options to pass to the method.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Display the matched elements by fading them to opaque.</summary>
+ /// <param name="duration" type="">A string or number determining how long the animation will run.</param>
+ /// <param name="easing" type="String">A string indicating which easing function to use for the transition.</param>
+ /// <param name="complete" type="Function">A function to call once the animation is complete.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'fadeOut': function() {
+ /// <signature>
+ /// <summary>Hide the matched elements by fading them to transparent.</summary>
+ /// <param name="duration" type="">A string or number determining how long the animation will run.</param>
+ /// <param name="complete" type="Function">A function to call once the animation is complete.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Hide the matched elements by fading them to transparent.</summary>
+ /// <param name="options" type="PlainObject">A map of additional options to pass to the method.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Hide the matched elements by fading them to transparent.</summary>
+ /// <param name="duration" type="">A string or number determining how long the animation will run.</param>
+ /// <param name="easing" type="String">A string indicating which easing function to use for the transition.</param>
+ /// <param name="complete" type="Function">A function to call once the animation is complete.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'fadeTo': function() {
+ /// <signature>
+ /// <summary>Adjust the opacity of the matched elements.</summary>
+ /// <param name="duration" type="">A string or number determining how long the animation will run.</param>
+ /// <param name="opacity" type="Number">A number between 0 and 1 denoting the target opacity.</param>
+ /// <param name="complete" type="Function">A function to call once the animation is complete.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Adjust the opacity of the matched elements.</summary>
+ /// <param name="duration" type="">A string or number determining how long the animation will run.</param>
+ /// <param name="opacity" type="Number">A number between 0 and 1 denoting the target opacity.</param>
+ /// <param name="easing" type="String">A string indicating which easing function to use for the transition.</param>
+ /// <param name="complete" type="Function">A function to call once the animation is complete.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'fadeToggle': function() {
+ /// <signature>
+ /// <summary>Display or hide the matched elements by animating their opacity.</summary>
+ /// <param name="duration" type="">A string or number determining how long the animation will run.</param>
+ /// <param name="easing" type="String">A string indicating which easing function to use for the transition.</param>
+ /// <param name="complete" type="Function">A function to call once the animation is complete.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Display or hide the matched elements by animating their opacity.</summary>
+ /// <param name="options" type="PlainObject">A map of additional options to pass to the method.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'file': function() {
+ /// <summary>Selects all elements of type file.</summary>
+ },
+ 'filter': function() {
+ /// <signature>
+ /// <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>
+ /// <param name="selector" type="String">A string containing a selector expression to match the current set of elements against.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>
+ /// <param name="function(index)" type="Function">A function used as a test for each element in the set. this is the current DOM element.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>
+ /// <param name="element" type="Element">An element to match the current set of elements against.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Reduce the set of matched elements to those that match the selector or pass the function's test.</summary>
+ /// <param name="jQuery object" type="Object">An existing jQuery object to match the current set of elements against.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'find': function() {
+ /// <signature>
+ /// <summary>Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.</summary>
+ /// <param name="selector" type="String">A string containing a selector expression to match elements against.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.</summary>
+ /// <param name="jQuery object" type="Object">A jQuery object to match elements against.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.</summary>
+ /// <param name="element" type="Element">An element to match elements against.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'finish': function() {
+ /// <signature>
+ /// <summary>Stop the currently-running animation, remove all queued animations, and complete all animations for the matched elements.</summary>
+ /// <param name="queue" type="String">The name of the queue in which to stop animations.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'first': function() {
+ /// <summary>Selects the first matched element.</summary>
+ },
+ 'first-child': function() {
+ /// <summary>Selects all elements that are the first child of their parent.</summary>
+ },
+ 'first-of-type': function() {
+ /// <summary>Selects all elements that are the first among siblings of the same element name.</summary>
+ },
+ 'focus': function() {
+ /// <signature>
+ /// <summary>Bind an event handler to the "focus" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Bind an event handler to the "focus" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="eventData" type="Object">An object containing data that will be passed to the event handler.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'focusin': function() {
+ /// <signature>
+ /// <summary>Bind an event handler to the "focusin" event.</summary>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Bind an event handler to the "focusin" event.</summary>
+ /// <param name="eventData" type="Object">An object containing data that will be passed to the event handler.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'focusout': function() {
+ /// <signature>
+ /// <summary>Bind an event handler to the "focusout" JavaScript event.</summary>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Bind an event handler to the "focusout" JavaScript event.</summary>
+ /// <param name="eventData" type="Object">An object containing data that will be passed to the event handler.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'get': function() {
+ /// <signature>
+ /// <summary>Retrieve one of the DOM elements matched by the jQuery object.</summary>
+ /// <param name="index" type="Number">A zero-based integer indicating which element to retrieve.</param>
+ /// <returns type="Element" />
+ /// </signature>
+ },
+ 'gt': function() {
+ /// <signature>
+ /// <summary>Select all elements at an index greater than index within the matched set.</summary>
+ /// <param name="index" type="Number">Zero-based index.</param>
+ /// </signature>
+ /// <signature>
+ /// <summary>Select all elements at an index greater than index within the matched set.</summary>
+ /// <param name="-index" type="Number">Zero-based index, counting backwards from the last element.</param>
+ /// </signature>
+ },
+ 'has': function() {
+ /// <signature>
+ /// <summary>Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.</summary>
+ /// <param name="selector" type="String">A string containing a selector expression to match elements against.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.</summary>
+ /// <param name="contained" type="Element">A DOM element to match elements against.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'hasClass': function() {
+ /// <signature>
+ /// <summary>Determine whether any of the matched elements are assigned the given class.</summary>
+ /// <param name="className" type="String">The class name to search for.</param>
+ /// <returns type="Boolean" />
+ /// </signature>
+ },
+ 'header': function() {
+ /// <summary>Selects all elements that are headers, like h1, h2, h3 and so on.</summary>
+ },
+ 'height': function() {
+ /// <signature>
+ /// <summary>Set the CSS height of every matched element.</summary>
+ /// <param name="value" type="">An integer representing the number of pixels, or an integer with an optional unit of measure appended (as a string).</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Set the CSS height of every matched element.</summary>
+ /// <param name="function(index, height)" type="Function">A function returning the height to set. Receives the index position of the element in the set and the old height as arguments. Within the function, this refers to the current element in the set.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'hidden': function() {
+ /// <summary>Selects all elements that are hidden.</summary>
+ },
+ 'hide': function() {
+ /// <signature>
+ /// <summary>Hide the matched elements.</summary>
+ /// <param name="duration" type="">A string or number determining how long the animation will run.</param>
+ /// <param name="complete" type="Function">A function to call once the animation is complete.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Hide the matched elements.</summary>
+ /// <param name="options" type="PlainObject">A map of additional options to pass to the method.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Hide the matched elements.</summary>
+ /// <param name="duration" type="">A string or number determining how long the animation will run.</param>
+ /// <param name="easing" type="String">A string indicating which easing function to use for the transition.</param>
+ /// <param name="complete" type="Function">A function to call once the animation is complete.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'hover': function() {
+ /// <signature>
+ /// <summary>Bind two handlers to the matched elements, to be executed when the mouse pointer enters and leaves the elements.</summary>
+ /// <param name="handlerIn(eventObject)" type="Function">A function to execute when the mouse pointer enters the element.</param>
+ /// <param name="handlerOut(eventObject)" type="Function">A function to execute when the mouse pointer leaves the element.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'html': function() {
+ /// <signature>
+ /// <summary>Set the HTML contents of each element in the set of matched elements.</summary>
+ /// <param name="htmlString" type="htmlString">A string of HTML to set as the content of each matched element.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Set the HTML contents of each element in the set of matched elements.</summary>
+ /// <param name="function(index, oldhtml)" type="Function">A function returning the HTML content to set. Receives the index position of the element in the set and the old HTML value as arguments. jQuery empties the element before calling the function; use the oldhtml argument to reference the previous content. Within the function, this refers to the current element in the set.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'id': function() {
+ /// <signature>
+ /// <summary>Selects a single element with the given id attribute.</summary>
+ /// <param name="id" type="String">An ID to search for, specified via the id attribute of an element.</param>
+ /// </signature>
+ },
+ 'image': function() {
+ /// <summary>Selects all elements of type image.</summary>
+ },
+ 'index': function() {
+ /// <signature>
+ /// <summary>Search for a given element from among the matched elements.</summary>
+ /// <param name="selector" type="String">A selector representing a jQuery collection in which to look for an element.</param>
+ /// <returns type="Number" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Search for a given element from among the matched elements.</summary>
+ /// <param name="element" type="">The DOM element or first element within the jQuery object to look for.</param>
+ /// <returns type="Number" />
+ /// </signature>
+ },
+ 'init': function() {
+ /// <signature>
+ /// <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>
+ /// <param name="selector" type="String">A string containing a selector expression</param>
+ /// <param name="context" type="">A DOM Element, Document, or jQuery to use as context</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>
+ /// <param name="element" type="Element">A DOM element to wrap in a jQuery object.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>
+ /// <param name="elementArray" type="Array">An array containing a set of DOM elements to wrap in a jQuery object.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>
+ /// <param name="object" type="PlainObject">A plain object to wrap in a jQuery object.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>
+ /// <param name="jQuery object" type="PlainObject">An existing jQuery object to clone.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'innerHeight': function() {
+ /// <summary>Get the current computed height for the first element in the set of matched elements, including padding but not border.</summary>
+ /// <returns type="Number" />
+ },
+ 'innerWidth': function() {
+ /// <summary>Get the current computed width for the first element in the set of matched elements, including padding but not border.</summary>
+ /// <returns type="Number" />
+ },
+ 'input': function() {
+ /// <summary>Selects all input, textarea, select and button elements.</summary>
+ },
+ 'insertAfter': function() {
+ /// <signature>
+ /// <summary>Insert every element in the set of matched elements after the target.</summary>
+ /// <param name="target" type="">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted after the element(s) specified by this parameter.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'insertBefore': function() {
+ /// <signature>
+ /// <summary>Insert every element in the set of matched elements before the target.</summary>
+ /// <param name="target" type="">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted before the element(s) specified by this parameter.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'is': function() {
+ /// <signature>
+ /// <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>
+ /// <param name="selector" type="String">A string containing a selector expression to match elements against.</param>
+ /// <returns type="Boolean" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>
+ /// <param name="function(index)" type="Function">A function used as a test for the set of elements. It accepts one argument, index, which is the element's index in the jQuery collection.Within the function, this refers to the current DOM element.</param>
+ /// <returns type="Boolean" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>
+ /// <param name="jQuery object" type="Object">An existing jQuery object to match the current set of elements against.</param>
+ /// <returns type="Boolean" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments.</summary>
+ /// <param name="element" type="Element">An element to match the current set of elements against.</param>
+ /// <returns type="Boolean" />
+ /// </signature>
+ },
+ 'jquery': function() {
+ /// <summary>A string containing the jQuery version number.</summary>
+ /// <returns type="String" />
+ },
+ 'keydown': function() {
+ /// <signature>
+ /// <summary>Bind an event handler to the "keydown" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Bind an event handler to the "keydown" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="eventData" type="PlainObject">An object containing data that will be passed to the event handler.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'keypress': function() {
+ /// <signature>
+ /// <summary>Bind an event handler to the "keypress" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Bind an event handler to the "keypress" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="eventData" type="PlainObject">An object containing data that will be passed to the event handler.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'keyup': function() {
+ /// <signature>
+ /// <summary>Bind an event handler to the "keyup" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Bind an event handler to the "keyup" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="eventData" type="PlainObject">An object containing data that will be passed to the event handler.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'lang': function() {
+ /// <signature>
+ /// <summary>Selects all elements of the specified language.</summary>
+ /// <param name="language" type="String">A language code.</param>
+ /// </signature>
+ },
+ 'last': function() {
+ /// <summary>Selects the last matched element.</summary>
+ },
+ 'last-child': function() {
+ /// <summary>Selects all elements that are the last child of their parent.</summary>
+ },
+ 'last-of-type': function() {
+ /// <summary>Selects all elements that are the last among siblings of the same element name.</summary>
+ },
+ 'length': function() {
+ /// <summary>The number of elements in the jQuery object.</summary>
+ /// <returns type="Number" />
+ },
+ 'live': function() {
+ /// <signature>
+ /// <summary>Attach an event handler for all elements which match the current selector, now and in the future.</summary>
+ /// <param name="events" type="String">A string containing a JavaScript event type, such as "click" or "keydown." As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute at the time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Attach an event handler for all elements which match the current selector, now and in the future.</summary>
+ /// <param name="events" type="String">A string containing a JavaScript event type, such as "click" or "keydown." As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names.</param>
+ /// <param name="data" type="PlainObject">An object containing data that will be passed to the event handler.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute at the time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Attach an event handler for all elements which match the current selector, now and in the future.</summary>
+ /// <param name="events" type="PlainObject">A plain object of one or more JavaScript event types and functions to execute for them.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'load': function() {
+ /// <signature>
+ /// <summary>Bind an event handler to the "load" JavaScript event.</summary>
+ /// <param name="handler(eventObject)" type="Function">A function to execute when the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Bind an event handler to the "load" JavaScript event.</summary>
+ /// <param name="eventData" type="PlainObject">An object containing data that will be passed to the event handler.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'lt': function() {
+ /// <signature>
+ /// <summary>Select all elements at an index less than index within the matched set.</summary>
+ /// <param name="index" type="Number">Zero-based index.</param>
+ /// </signature>
+ /// <signature>
+ /// <summary>Select all elements at an index less than index within the matched set.</summary>
+ /// <param name="-index" type="Number">Zero-based index, counting backwards from the last element.</param>
+ /// </signature>
+ },
+ 'map': function() {
+ /// <signature>
+ /// <summary>Pass each element in the current matched set through a function, producing a new jQuery object containing the return values.</summary>
+ /// <param name="callback(index, domElement)" type="Function">A function object that will be invoked for each element in the current set.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'mousedown': function() {
+ /// <signature>
+ /// <summary>Bind an event handler to the "mousedown" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Bind an event handler to the "mousedown" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="eventData" type="PlainObject">An object containing data that will be passed to the event handler.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'mouseenter': function() {
+ /// <signature>
+ /// <summary>Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element.</summary>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element.</summary>
+ /// <param name="eventData" type="PlainObject">An object containing data that will be passed to the event handler.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'mouseleave': function() {
+ /// <signature>
+ /// <summary>Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element.</summary>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element.</summary>
+ /// <param name="eventData" type="PlainObject">An object containing data that will be passed to the event handler.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'mousemove': function() {
+ /// <signature>
+ /// <summary>Bind an event handler to the "mousemove" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Bind an event handler to the "mousemove" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="eventData" type="PlainObject">An object containing data that will be passed to the event handler.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'mouseout': function() {
+ /// <signature>
+ /// <summary>Bind an event handler to the "mouseout" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Bind an event handler to the "mouseout" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="eventData" type="PlainObject">An object containing data that will be passed to the event handler.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'mouseover': function() {
+ /// <signature>
+ /// <summary>Bind an event handler to the "mouseover" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Bind an event handler to the "mouseover" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="eventData" type="PlainObject">An object containing data that will be passed to the event handler.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'mouseup': function() {
+ /// <signature>
+ /// <summary>Bind an event handler to the "mouseup" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Bind an event handler to the "mouseup" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="eventData" type="PlainObject">An object containing data that will be passed to the event handler.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'multiple': function() {
+ /// <signature>
+ /// <summary>Selects the combined results of all the specified selectors.</summary>
+ /// <param name="selector1" type="String">Any valid selector.</param>
+ /// <param name="selector2" type="String">Another valid selector.</param>
+ /// <param name="selectorN" type="String">As many more valid selectors as you like.</param>
+ /// </signature>
+ },
+ 'next': function() {
+ /// <signature>
+ /// <summary>Get the immediately following sibling of each element in the set of matched elements. If a selector is provided, it retrieves the next sibling only if it matches that selector.</summary>
+ /// <param name="selector" type="String">A string containing a selector expression to match elements against.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'next adjacent': function() {
+ /// <signature>
+ /// <summary>Selects all next elements matching "next" that are immediately preceded by a sibling "prev".</summary>
+ /// <param name="prev" type="String">Any valid selector.</param>
+ /// <param name="next" type="String">A selector to match the element that is next to the first selector.</param>
+ /// </signature>
+ },
+ 'next siblings': function() {
+ /// <signature>
+ /// <summary>Selects all sibling elements that follow after the "prev" element, have the same parent, and match the filtering "siblings" selector.</summary>
+ /// <param name="prev" type="String">Any valid selector.</param>
+ /// <param name="siblings" type="String">A selector to filter elements that are the following siblings of the first selector.</param>
+ /// </signature>
+ },
+ 'nextAll': function() {
+ /// <signature>
+ /// <summary>Get all following siblings of each element in the set of matched elements, optionally filtered by a selector.</summary>
+ /// <param name="selector" type="String">A string containing a selector expression to match elements against.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'nextUntil': function() {
+ /// <signature>
+ /// <summary>Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.</summary>
+ /// <param name="selector" type="String">A string containing a selector expression to indicate where to stop matching following sibling elements.</param>
+ /// <param name="filter" type="String">A string containing a selector expression to match elements against.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed.</summary>
+ /// <param name="element" type="Element">A DOM node or jQuery object indicating where to stop matching following sibling elements.</param>
+ /// <param name="filter" type="String">A string containing a selector expression to match elements against.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'not': function() {
+ /// <signature>
+ /// <summary>Remove elements from the set of matched elements.</summary>
+ /// <param name="selector" type="String">A string containing a selector expression to match elements against.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Remove elements from the set of matched elements.</summary>
+ /// <param name="elements" type="Array">One or more DOM elements to remove from the matched set.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Remove elements from the set of matched elements.</summary>
+ /// <param name="function(index)" type="Function">A function used as a test for each element in the set. this is the current DOM element.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Remove elements from the set of matched elements.</summary>
+ /// <param name="jQuery object" type="PlainObject">An existing jQuery object to match the current set of elements against.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'nth-child': function() {
+ /// <signature>
+ /// <summary>Selects all elements that are the nth-child of their parent.</summary>
+ /// <param name="index" type="String">The index of each child to match, starting with 1, the string even or odd, or an equation ( eg. :nth-child(even), :nth-child(4n) )</param>
+ /// </signature>
+ },
+ 'nth-last-child': function() {
+ /// <signature>
+ /// <summary>Selects all elements that are the nth-child of their parent, counting from the last element to the first.</summary>
+ /// <param name="index" type="String">The index of each child to match, starting with the last one (1), the string even or odd, or an equation ( eg. :nth-last-child(even), :nth-last-child(4n) )</param>
+ /// </signature>
+ },
+ 'nth-last-of-type': function() {
+ /// <signature>
+ /// <summary>Selects all elements that are the nth-child of their parent, counting from the last element to the first.</summary>
+ /// <param name="index" type="String">The index of each child to match, starting with the last one (1), the string even or odd, or an equation ( eg. :nth-last-of-type(even), :nth-last-of-type(4n) )</param>
+ /// </signature>
+ },
+ 'nth-of-type': function() {
+ /// <signature>
+ /// <summary>Selects all elements that are the nth child of their parent in relation to siblings with the same element name.</summary>
+ /// <param name="index" type="String">The index of each child to match, starting with 1, the string even or odd, or an equation ( eg. :nth-of-type(even), :nth-of-type(4n) )</param>
+ /// </signature>
+ },
+ 'odd': function() {
+ /// <summary>Selects odd elements, zero-indexed. See also even.</summary>
+ },
+ 'off': function() {
+ /// <signature>
+ /// <summary>Remove an event handler.</summary>
+ /// <param name="events" type="String">One or more space-separated event types and optional namespaces, or just namespaces, such as "click", "keydown.myPlugin", or ".myPlugin".</param>
+ /// <param name="selector" type="String">A selector which should match the one originally passed to .on() when attaching event handlers.</param>
+ /// <param name="handler(eventObject)" type="Function">A handler function previously attached for the event(s), or the special value false.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Remove an event handler.</summary>
+ /// <param name="events" type="PlainObject">An object where the string keys represent one or more space-separated event types and optional namespaces, and the values represent handler functions previously attached for the event(s).</param>
+ /// <param name="selector" type="String">A selector which should match the one originally passed to .on() when attaching event handlers.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'offset': function() {
+ /// <signature>
+ /// <summary>Set the current coordinates of every element in the set of matched elements, relative to the document.</summary>
+ /// <param name="coordinates" type="PlainObject">An object containing the properties top and left, which are integers indicating the new top and left coordinates for the elements.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Set the current coordinates of every element in the set of matched elements, relative to the document.</summary>
+ /// <param name="function(index, coords)" type="Function">A function to return the coordinates to set. Receives the index of the element in the collection as the first argument and the current coordinates as the second argument. The function should return an object with the new top and left properties.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'offsetParent': function() {
+ /// <summary>Get the closest ancestor element that is positioned.</summary>
+ /// <returns type="jQuery" />
+ },
+ 'on': function() {
+ /// <signature>
+ /// <summary>Attach an event handler function for one or more events to the selected elements.</summary>
+ /// <param name="events" type="String">One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin".</param>
+ /// <param name="selector" type="String">A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.</param>
+ /// <param name="data" type="Anything">Data to be passed to the handler in event.data when an event is triggered.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Attach an event handler function for one or more events to the selected elements.</summary>
+ /// <param name="events" type="PlainObject">An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).</param>
+ /// <param name="selector" type="String">A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.</param>
+ /// <param name="data" type="Anything">Data to be passed to the handler in event.data when an event occurs.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'one': function() {
+ /// <signature>
+ /// <summary>Attach a handler to an event for the elements. The handler is executed at most once per element.</summary>
+ /// <param name="events" type="String">A string containing one or more JavaScript event types, such as "click" or "submit," or custom event names.</param>
+ /// <param name="data" type="PlainObject">An object containing data that will be passed to the event handler.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute at the time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Attach a handler to an event for the elements. The handler is executed at most once per element.</summary>
+ /// <param name="events" type="String">One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin".</param>
+ /// <param name="selector" type="String">A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.</param>
+ /// <param name="data" type="Anything">Data to be passed to the handler in event.data when an event is triggered.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Attach a handler to an event for the elements. The handler is executed at most once per element.</summary>
+ /// <param name="events" type="PlainObject">An object in which the string keys represent one or more space-separated event types and optional namespaces, and the values represent a handler function to be called for the event(s).</param>
+ /// <param name="selector" type="String">A selector string to filter the descendants of the selected elements that will call the handler. If the selector is null or omitted, the handler is always called when it reaches the selected element.</param>
+ /// <param name="data" type="Anything">Data to be passed to the handler in event.data when an event occurs.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'only-child': function() {
+ /// <summary>Selects all elements that are the only child of their parent.</summary>
+ },
+ 'only-of-type': function() {
+ /// <summary>Selects all elements that have no siblings with the same element name.</summary>
+ },
+ 'outerHeight': function() {
+ /// <signature>
+ /// <summary>Get the current computed height for the first element in the set of matched elements, including padding, border, and optionally margin. Returns an integer (without "px") representation of the value or null if called on an empty set of elements.</summary>
+ /// <param name="includeMargin" type="Boolean">A Boolean indicating whether to include the element's margin in the calculation.</param>
+ /// <returns type="Number" />
+ /// </signature>
+ },
+ 'outerWidth': function() {
+ /// <signature>
+ /// <summary>Get the current computed width for the first element in the set of matched elements, including padding and border.</summary>
+ /// <param name="includeMargin" type="Boolean">A Boolean indicating whether to include the element's margin in the calculation.</param>
+ /// <returns type="Number" />
+ /// </signature>
+ },
+ 'parent': function() {
+ /// <signature>
+ /// <summary>Get the parent of each element in the current set of matched elements, optionally filtered by a selector.</summary>
+ /// <param name="selector" type="String">A string containing a selector expression to match elements against.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'parents': function() {
+ /// <signature>
+ /// <summary>Get the ancestors of each element in the current set of matched elements, optionally filtered by a selector.</summary>
+ /// <param name="selector" type="String">A string containing a selector expression to match elements against.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'parentsUntil': function() {
+ /// <signature>
+ /// <summary>Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>
+ /// <param name="selector" type="String">A string containing a selector expression to indicate where to stop matching ancestor elements.</param>
+ /// <param name="filter" type="String">A string containing a selector expression to match elements against.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>
+ /// <param name="element" type="Element">A DOM node or jQuery object indicating where to stop matching ancestor elements.</param>
+ /// <param name="filter" type="String">A string containing a selector expression to match elements against.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'password': function() {
+ /// <summary>Selects all elements of type password.</summary>
+ },
+ 'position': function() {
+ /// <summary>Get the current coordinates of the first element in the set of matched elements, relative to the offset parent.</summary>
+ /// <returns type="Object" />
+ },
+ 'prepend': function() {
+ /// <signature>
+ /// <summary>Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.</summary>
+ /// <param name="content" type="">DOM element, array of elements, HTML string, or jQuery object to insert at the beginning of each element in the set of matched elements.</param>
+ /// <param name="content" type="">One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the beginning of each element in the set of matched elements.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.</summary>
+ /// <param name="function(index, html)" type="Function">A function that returns an HTML string, DOM element(s), or jQuery object to insert at the beginning of each element in the set of matched elements. Receives the index position of the element in the set and the old HTML value of the element as arguments. Within the function, this refers to the current element in the set.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'prependTo': function() {
+ /// <signature>
+ /// <summary>Insert every element in the set of matched elements to the beginning of the target.</summary>
+ /// <param name="target" type="">A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the beginning of the element(s) specified by this parameter.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'prev': function() {
+ /// <signature>
+ /// <summary>Get the immediately preceding sibling of each element in the set of matched elements, optionally filtered by a selector.</summary>
+ /// <param name="selector" type="String">A string containing a selector expression to match elements against.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'prevAll': function() {
+ /// <signature>
+ /// <summary>Get all preceding siblings of each element in the set of matched elements, optionally filtered by a selector.</summary>
+ /// <param name="selector" type="String">A string containing a selector expression to match elements against.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'prevUntil': function() {
+ /// <signature>
+ /// <summary>Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>
+ /// <param name="selector" type="String">A string containing a selector expression to indicate where to stop matching preceding sibling elements.</param>
+ /// <param name="filter" type="String">A string containing a selector expression to match elements against.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object.</summary>
+ /// <param name="element" type="Element">A DOM node or jQuery object indicating where to stop matching preceding sibling elements.</param>
+ /// <param name="filter" type="String">A string containing a selector expression to match elements against.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'promise': function() {
+ /// <signature>
+ /// <summary>Return a Promise object to observe when all actions of a certain type bound to the collection, queued or not, have finished.</summary>
+ /// <param name="type" type="String">The type of queue that needs to be observed.</param>
+ /// <param name="target" type="PlainObject">Object onto which the promise methods have to be attached</param>
+ /// <returns type="Promise" />
+ /// </signature>
+ },
+ 'prop': function() {
+ /// <signature>
+ /// <summary>Set one or more properties for the set of matched elements.</summary>
+ /// <param name="propertyName" type="String">The name of the property to set.</param>
+ /// <param name="value" type="">A value to set for the property.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Set one or more properties for the set of matched elements.</summary>
+ /// <param name="properties" type="PlainObject">An object of property-value pairs to set.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Set one or more properties for the set of matched elements.</summary>
+ /// <param name="propertyName" type="String">The name of the property to set.</param>
+ /// <param name="function(index, oldPropertyValue)" type="Function">A function returning the value to set. Receives the index position of the element in the set and the old property value as arguments. Within the function, the keyword this refers to the current element.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'pushStack': function() {
+ /// <signature>
+ /// <summary>Add a collection of DOM elements onto the jQuery stack.</summary>
+ /// <param name="elements" type="Array">An array of elements to push onto the stack and make into a new jQuery object.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Add a collection of DOM elements onto the jQuery stack.</summary>
+ /// <param name="elements" type="Array">An array of elements to push onto the stack and make into a new jQuery object.</param>
+ /// <param name="name" type="String">The name of a jQuery method that generated the array of elements.</param>
+ /// <param name="arguments" type="Array">The arguments that were passed in to the jQuery method (for serialization).</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'queue': function() {
+ /// <signature>
+ /// <summary>Manipulate the queue of functions to be executed, once for each matched element.</summary>
+ /// <param name="queueName" type="String">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>
+ /// <param name="newQueue" type="Array">An array of functions to replace the current queue contents.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Manipulate the queue of functions to be executed, once for each matched element.</summary>
+ /// <param name="queueName" type="String">A string containing the name of the queue. Defaults to fx, the standard effects queue.</param>
+ /// <param name="callback( next )" type="Function">The new function to add to the queue, with a function to call that will dequeue the next item.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'radio': function() {
+ /// <summary>Selects all elements of type radio.</summary>
+ },
+ 'ready': function() {
+ /// <signature>
+ /// <summary>Specify a function to execute when the DOM is fully loaded.</summary>
+ /// <param name="handler" type="Function">A function to execute after the DOM is ready.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'remove': function() {
+ /// <signature>
+ /// <summary>Remove the set of matched elements from the DOM.</summary>
+ /// <param name="selector" type="String">A selector expression that filters the set of matched elements to be removed.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'removeAttr': function() {
+ /// <signature>
+ /// <summary>Remove an attribute from each element in the set of matched elements.</summary>
+ /// <param name="attributeName" type="String">An attribute to remove; as of version 1.7, it can be a space-separated list of attributes.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'removeClass': function() {
+ /// <signature>
+ /// <summary>Remove a single class, multiple classes, or all classes from each element in the set of matched elements.</summary>
+ /// <param name="className" type="String">One or more space-separated classes to be removed from the class attribute of each matched element.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Remove a single class, multiple classes, or all classes from each element in the set of matched elements.</summary>
+ /// <param name="function(index, class)" type="Function">A function returning one or more space-separated class names to be removed. Receives the index position of the element in the set and the old class value as arguments.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'removeData': function() {
+ /// <signature>
+ /// <summary>Remove a previously-stored piece of data.</summary>
+ /// <param name="name" type="String">A string naming the piece of data to delete.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Remove a previously-stored piece of data.</summary>
+ /// <param name="list" type="">An array or space-separated string naming the pieces of data to delete.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'removeProp': function() {
+ /// <signature>
+ /// <summary>Remove a property for the set of matched elements.</summary>
+ /// <param name="propertyName" type="String">The name of the property to remove.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'replaceAll': function() {
+ /// <signature>
+ /// <summary>Replace each target element with the set of matched elements.</summary>
+ /// <param name="target" type="">A selector string, jQuery object, or DOM element reference indicating which element(s) to replace.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'replaceWith': function() {
+ /// <signature>
+ /// <summary>Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed.</summary>
+ /// <param name="newContent" type="">The content to insert. May be an HTML string, DOM element, or jQuery object.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed.</summary>
+ /// <param name="function" type="Function">A function that returns content with which to replace the set of matched elements.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'reset': function() {
+ /// <summary>Selects all elements of type reset.</summary>
+ },
+ 'resize': function() {
+ /// <signature>
+ /// <summary>Bind an event handler to the "resize" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Bind an event handler to the "resize" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="eventData" type="PlainObject">An object containing data that will be passed to the event handler.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'root': function() {
+ /// <summary>Selects the element that is the root of the document.</summary>
+ },
+ 'scroll': function() {
+ /// <signature>
+ /// <summary>Bind an event handler to the "scroll" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Bind an event handler to the "scroll" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="eventData" type="PlainObject">An object containing data that will be passed to the event handler.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'scrollLeft': function() {
+ /// <signature>
+ /// <summary>Set the current horizontal position of the scroll bar for each of the set of matched elements.</summary>
+ /// <param name="value" type="Number">An integer indicating the new position to set the scroll bar to.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'scrollTop': function() {
+ /// <signature>
+ /// <summary>Set the current vertical position of the scroll bar for each of the set of matched elements.</summary>
+ /// <param name="value" type="Number">An integer indicating the new position to set the scroll bar to.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'select': function() {
+ /// <signature>
+ /// <summary>Bind an event handler to the "select" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Bind an event handler to the "select" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="eventData" type="PlainObject">An object containing data that will be passed to the event handler.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'selected': function() {
+ /// <summary>Selects all elements that are selected.</summary>
+ },
+ 'selector': function() {
+ /// <summary>A selector representing selector passed to jQuery(), if any, when creating the original set.</summary>
+ /// <returns type="String" />
+ },
+ 'serialize': function() {
+ /// <summary>Encode a set of form elements as a string for submission.</summary>
+ /// <returns type="String" />
+ },
+ 'serializeArray': function() {
+ /// <summary>Encode a set of form elements as an array of names and values.</summary>
+ /// <returns type="Array" />
+ },
+ 'show': function() {
+ /// <signature>
+ /// <summary>Display the matched elements.</summary>
+ /// <param name="duration" type="">A string or number determining how long the animation will run.</param>
+ /// <param name="complete" type="Function">A function to call once the animation is complete.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Display the matched elements.</summary>
+ /// <param name="options" type="PlainObject">A map of additional options to pass to the method.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Display the matched elements.</summary>
+ /// <param name="duration" type="">A string or number determining how long the animation will run.</param>
+ /// <param name="easing" type="String">A string indicating which easing function to use for the transition.</param>
+ /// <param name="complete" type="Function">A function to call once the animation is complete.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'siblings': function() {
+ /// <signature>
+ /// <summary>Get the siblings of each element in the set of matched elements, optionally filtered by a selector.</summary>
+ /// <param name="selector" type="String">A string containing a selector expression to match elements against.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'size': function() {
+ /// <summary>Return the number of elements in the jQuery object.</summary>
+ /// <returns type="Number" />
+ },
+ 'slice': function() {
+ /// <signature>
+ /// <summary>Reduce the set of matched elements to a subset specified by a range of indices.</summary>
+ /// <param name="start" type="Number">An integer indicating the 0-based position at which the elements begin to be selected. If negative, it indicates an offset from the end of the set.</param>
+ /// <param name="end" type="Number">An integer indicating the 0-based position at which the elements stop being selected. If negative, it indicates an offset from the end of the set. If omitted, the range continues until the end of the set.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'slideDown': function() {
+ /// <signature>
+ /// <summary>Display the matched elements with a sliding motion.</summary>
+ /// <param name="duration" type="">A string or number determining how long the animation will run.</param>
+ /// <param name="complete" type="Function">A function to call once the animation is complete.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Display the matched elements with a sliding motion.</summary>
+ /// <param name="options" type="PlainObject">A map of additional options to pass to the method.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Display the matched elements with a sliding motion.</summary>
+ /// <param name="duration" type="">A string or number determining how long the animation will run.</param>
+ /// <param name="easing" type="String">A string indicating which easing function to use for the transition.</param>
+ /// <param name="complete" type="Function">A function to call once the animation is complete.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'slideToggle': function() {
+ /// <signature>
+ /// <summary>Display or hide the matched elements with a sliding motion.</summary>
+ /// <param name="duration" type="">A string or number determining how long the animation will run.</param>
+ /// <param name="complete" type="Function">A function to call once the animation is complete.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Display or hide the matched elements with a sliding motion.</summary>
+ /// <param name="options" type="PlainObject">A map of additional options to pass to the method.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Display or hide the matched elements with a sliding motion.</summary>
+ /// <param name="duration" type="">A string or number determining how long the animation will run.</param>
+ /// <param name="easing" type="String">A string indicating which easing function to use for the transition.</param>
+ /// <param name="complete" type="Function">A function to call once the animation is complete.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'slideUp': function() {
+ /// <signature>
+ /// <summary>Hide the matched elements with a sliding motion.</summary>
+ /// <param name="duration" type="">A string or number determining how long the animation will run.</param>
+ /// <param name="complete" type="Function">A function to call once the animation is complete.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Hide the matched elements with a sliding motion.</summary>
+ /// <param name="options" type="PlainObject">A map of additional options to pass to the method.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Hide the matched elements with a sliding motion.</summary>
+ /// <param name="duration" type="">A string or number determining how long the animation will run.</param>
+ /// <param name="easing" type="String">A string indicating which easing function to use for the transition.</param>
+ /// <param name="complete" type="Function">A function to call once the animation is complete.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'stop': function() {
+ /// <signature>
+ /// <summary>Stop the currently-running animation on the matched elements.</summary>
+ /// <param name="clearQueue" type="Boolean">A Boolean indicating whether to remove queued animation as well. Defaults to false.</param>
+ /// <param name="jumpToEnd" type="Boolean">A Boolean indicating whether to complete the current animation immediately. Defaults to false.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Stop the currently-running animation on the matched elements.</summary>
+ /// <param name="queue" type="String">The name of the queue in which to stop animations.</param>
+ /// <param name="clearQueue" type="Boolean">A Boolean indicating whether to remove queued animation as well. Defaults to false.</param>
+ /// <param name="jumpToEnd" type="Boolean">A Boolean indicating whether to complete the current animation immediately. Defaults to false.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'submit': function() {
+ /// <signature>
+ /// <summary>Bind an event handler to the "submit" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Bind an event handler to the "submit" JavaScript event, or trigger that event on an element.</summary>
+ /// <param name="eventData" type="PlainObject">An object containing data that will be passed to the event handler.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'target': function() {
+ /// <summary>Selects the target element indicated by the fragment identifier of the document's URI.</summary>
+ },
+ 'text': function() {
+ /// <signature>
+ /// <summary>Set the content of each element in the set of matched elements to the specified text.</summary>
+ /// <param name="textString" type="String">A string of text to set as the content of each matched element.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Set the content of each element in the set of matched elements to the specified text.</summary>
+ /// <param name="function(index, text)" type="Function">A function returning the text content to set. Receives the index position of the element in the set and the old text value as arguments.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'toArray': function() {
+ /// <summary>Retrieve all the DOM elements contained in the jQuery set, as an array.</summary>
+ /// <returns type="Array" />
+ },
+ 'toggle': function() {
+ /// <signature>
+ /// <summary>Display or hide the matched elements.</summary>
+ /// <param name="duration" type="">A string or number determining how long the animation will run.</param>
+ /// <param name="complete" type="Function">A function to call once the animation is complete.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Display or hide the matched elements.</summary>
+ /// <param name="options" type="PlainObject">A map of additional options to pass to the method.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Display or hide the matched elements.</summary>
+ /// <param name="duration" type="">A string or number determining how long the animation will run.</param>
+ /// <param name="easing" type="String">A string indicating which easing function to use for the transition.</param>
+ /// <param name="complete" type="Function">A function to call once the animation is complete.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Display or hide the matched elements.</summary>
+ /// <param name="showOrHide" type="Boolean">A Boolean indicating whether to show or hide the elements.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'toggleClass': function() {
+ /// <signature>
+ /// <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>
+ /// <param name="className" type="String">One or more class names (separated by spaces) to be toggled for each element in the matched set.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>
+ /// <param name="className" type="String">One or more class names (separated by spaces) to be toggled for each element in the matched set.</param>
+ /// <param name="switch" type="Boolean">A Boolean (not just truthy/falsy) value to determine whether the class should be added or removed.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>
+ /// <param name="switch" type="Boolean">A boolean value to determine whether the class should be added or removed.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument.</summary>
+ /// <param name="function(index, class, switch)" type="Function">A function that returns class names to be toggled in the class attribute of each element in the matched set. Receives the index position of the element in the set, the old class value, and the switch as arguments.</param>
+ /// <param name="switch" type="Boolean">A boolean value to determine whether the class should be added or removed.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'trigger': function() {
+ /// <signature>
+ /// <summary>Execute all handlers and behaviors attached to the matched elements for the given event type.</summary>
+ /// <param name="eventType" type="String">A string containing a JavaScript event type, such as click or submit.</param>
+ /// <param name="extraParameters" type="">Additional parameters to pass along to the event handler.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Execute all handlers and behaviors attached to the matched elements for the given event type.</summary>
+ /// <param name="event" type="Event">A jQuery.Event object.</param>
+ /// <param name="extraParameters" type="">Additional parameters to pass along to the event handler.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'triggerHandler': function() {
+ /// <signature>
+ /// <summary>Execute all handlers attached to an element for an event.</summary>
+ /// <param name="eventType" type="String">A string containing a JavaScript event type, such as click or submit.</param>
+ /// <param name="extraParameters" type="Array">An array of additional parameters to pass along to the event handler.</param>
+ /// <returns type="Object" />
+ /// </signature>
+ },
+ 'unbind': function() {
+ /// <signature>
+ /// <summary>Remove a previously-attached event handler from the elements.</summary>
+ /// <param name="eventType" type="String">A string containing a JavaScript event type, such as click or submit.</param>
+ /// <param name="handler(eventObject)" type="Function">The function that is to be no longer executed.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Remove a previously-attached event handler from the elements.</summary>
+ /// <param name="eventType" type="String">A string containing a JavaScript event type, such as click or submit.</param>
+ /// <param name="false" type="Boolean">Unbinds the corresponding 'return false' function that was bound using .bind( eventType, false ).</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Remove a previously-attached event handler from the elements.</summary>
+ /// <param name="event" type="Object">A JavaScript event object as passed to an event handler.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'undelegate': function() {
+ /// <signature>
+ /// <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>
+ /// <param name="selector" type="String">A selector which will be used to filter the event results.</param>
+ /// <param name="eventType" type="String">A string containing a JavaScript event type, such as "click" or "keydown"</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>
+ /// <param name="selector" type="String">A selector which will be used to filter the event results.</param>
+ /// <param name="eventType" type="String">A string containing a JavaScript event type, such as "click" or "keydown"</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute at the time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>
+ /// <param name="selector" type="String">A selector which will be used to filter the event results.</param>
+ /// <param name="events" type="PlainObject">An object of one or more event types and previously bound functions to unbind from them.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.</summary>
+ /// <param name="namespace" type="String">A string containing a namespace to unbind all events from.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'unload': function() {
+ /// <signature>
+ /// <summary>Bind an event handler to the "unload" JavaScript event.</summary>
+ /// <param name="handler(eventObject)" type="Function">A function to execute when the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Bind an event handler to the "unload" JavaScript event.</summary>
+ /// <param name="eventData" type="Object">A plain object of data that will be passed to the event handler.</param>
+ /// <param name="handler(eventObject)" type="Function">A function to execute each time the event is triggered.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'unwrap': function() {
+ /// <summary>Remove the parents of the set of matched elements from the DOM, leaving the matched elements in their place.</summary>
+ /// <returns type="jQuery" />
+ },
+ 'val': function() {
+ /// <signature>
+ /// <summary>Set the value of each element in the set of matched elements.</summary>
+ /// <param name="value" type="">A string of text or an array of strings corresponding to the value of each matched element to set as selected/checked.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Set the value of each element in the set of matched elements.</summary>
+ /// <param name="function(index, value)" type="Function">A function returning the value to set. this is the current element. Receives the index position of the element in the set and the old value as arguments.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'visible': function() {
+ /// <summary>Selects all elements that are visible.</summary>
+ },
+ 'width': function() {
+ /// <signature>
+ /// <summary>Set the CSS width of each element in the set of matched elements.</summary>
+ /// <param name="value" type="">An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string).</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Set the CSS width of each element in the set of matched elements.</summary>
+ /// <param name="function(index, width)" type="Function">A function returning the width to set. Receives the index position of the element in the set and the old width as arguments. Within the function, this refers to the current element in the set.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'wrap': function() {
+ /// <signature>
+ /// <summary>Wrap an HTML structure around each element in the set of matched elements.</summary>
+ /// <param name="wrappingElement" type="">A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Wrap an HTML structure around each element in the set of matched elements.</summary>
+ /// <param name="function(index)" type="Function">A callback function returning the HTML content or jQuery object to wrap around the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'wrapAll': function() {
+ /// <signature>
+ /// <summary>Wrap an HTML structure around all elements in the set of matched elements.</summary>
+ /// <param name="wrappingElement" type="">A selector, element, HTML string, or jQuery object specifying the structure to wrap around the matched elements.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+ 'wrapInner': function() {
+ /// <signature>
+ /// <summary>Wrap an HTML structure around the content of each element in the set of matched elements.</summary>
+ /// <param name="wrappingElement" type="String">An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the content of the matched elements.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Wrap an HTML structure around the content of each element in the set of matched elements.</summary>
+ /// <param name="function(index)" type="Function">A callback function which generates a structure to wrap around the content of the matched elements. Receives the index position of the element in the set as an argument. Within the function, this refers to the current element in the set.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+});
+
+intellisense.annotate(window, {
+ '$': function() {
+ /// <signature>
+ /// <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>
+ /// <param name="selector" type="String">A string containing a selector expression</param>
+ /// <param name="context" type="">A DOM Element, Document, or jQuery to use as context</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>
+ /// <param name="element" type="Element">A DOM element to wrap in a jQuery object.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>
+ /// <param name="elementArray" type="Array">An array containing a set of DOM elements to wrap in a jQuery object.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>
+ /// <param name="object" type="PlainObject">A plain object to wrap in a jQuery object.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ /// <signature>
+ /// <summary>Accepts a string containing a CSS selector which is then used to match a set of elements.</summary>
+ /// <param name="jQuery object" type="PlainObject">An existing jQuery object to clone.</param>
+ /// <returns type="jQuery" />
+ /// </signature>
+ },
+});
+
diff --git a/GitCandy.Web/Scripts/jquery-2.0.3.js b/GitCandy.Web/Scripts/jquery-2.0.3.js
new file mode 100644
index 0000000..ebc6c18
--- /dev/null
+++ b/GitCandy.Web/Scripts/jquery-2.0.3.js
@@ -0,0 +1,8829 @@
+/*!
+ * jQuery JavaScript Library v2.0.3
+ * http://jquery.com/
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ *
+ * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2013-07-03T13:30Z
+ */
+(function( window, undefined ) {
+
+// Can't do this because several apps including ASP.NET trace
+// the stack via arguments.caller.callee and Firefox dies if
+// you try to trace through "use strict" call chains. (#13335)
+// Support: Firefox 18+
+//"use strict";
+var
+ // A central reference to the root jQuery(document)
+ rootjQuery,
+
+ // The deferred used on DOM ready
+ readyList,
+
+ // Support: IE9
+ // For `typeof xmlNode.method` instead of `xmlNode.method !== undefined`
+ core_strundefined = typeof undefined,
+
+ // Use the correct document accordingly with window argument (sandbox)
+ location = window.location,
+ document = window.document,
+ docElem = document.documentElement,
+
+ // Map over jQuery in case of overwrite
+ _jQuery = window.jQuery,
+
+ // Map over the $ in case of overwrite
+ _$ = window.$,
+
+ // [[Class]] -> type pairs
+ class2type = {},
+
+ // List of deleted data cache ids, so we can reuse them
+ core_deletedIds = [],
+
+ core_version = "2.0.3",
+
+ // Save a reference to some core methods
+ core_concat = core_deletedIds.concat,
+ core_push = core_deletedIds.push,
+ core_slice = core_deletedIds.slice,
+ core_indexOf = core_deletedIds.indexOf,
+ core_toString = class2type.toString,
+ core_hasOwn = class2type.hasOwnProperty,
+ core_trim = core_version.trim,
+
+ // Define a local copy of jQuery
+ jQuery = function( selector, context ) {
+ // The jQuery object is actually just the init constructor 'enhanced'
+ return new jQuery.fn.init( selector, context, rootjQuery );
+ },
+
+ // Used for matching numbers
+ core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
+
+ // Used for splitting on whitespace
+ core_rnotwhite = /\S+/g,
+
+ // A simple way to check for HTML strings
+ // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+ // Strict HTML recognition (#11290: must start with <)
+ rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
+
+ // Match a standalone tag
+ rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
+
+ // Matches dashed string for camelizing
+ rmsPrefix = /^-ms-/,
+ rdashAlpha = /-([\da-z])/gi,
+
+ // Used by jQuery.camelCase as callback to replace()
+ fcamelCase = function( all, letter ) {
+ return letter.toUpperCase();
+ },
+
+ // The ready event handler and self cleanup method
+ completed = function() {
+ document.removeEventListener( "DOMContentLoaded", completed, false );
+ window.removeEventListener( "load", completed, false );
+ jQuery.ready();
+ };
+
+jQuery.fn = jQuery.prototype = {
+ // The current version of jQuery being used
+ jquery: core_version,
+
+ constructor: jQuery,
+ init: function( selector, context, rootjQuery ) {
+ var match, elem;
+
+ // HANDLE: $(""), $(null), $(undefined), $(false)
+ if ( !selector ) {
+ return this;
+ }
+
+ // Handle HTML strings
+ if ( typeof selector === "string" ) {
+ if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+ // Assume that strings that start and end with <> are HTML and skip the regex check
+ match = [ null, selector, null ];
+
+ } else {
+ match = rquickExpr.exec( selector );
+ }
+
+ // Match html or make sure no context is specified for #id
+ if ( match && (match[1] || !context) ) {
+
+ // HANDLE: $(html) -> $(array)
+ if ( match[1] ) {
+ context = context instanceof jQuery ? context[0] : context;
+
+ // scripts is true for back-compat
+ jQuery.merge( this, jQuery.parseHTML(
+ match[1],
+ context && context.nodeType ? context.ownerDocument || context : document,
+ true
+ ) );
+
+ // HANDLE: $(html, props)
+ if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
+ for ( match in context ) {
+ // Properties of context are called as methods if possible
+ if ( jQuery.isFunction( this[ match ] ) ) {
+ this[ match ]( context[ match ] );
+
+ // ...and otherwise set as attributes
+ } else {
+ this.attr( match, context[ match ] );
+ }
+ }
+ }
+
+ return this;
+
+ // HANDLE: $(#id)
+ } else {
+ elem = document.getElementById( match[2] );
+
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ if ( elem && elem.parentNode ) {
+ // Inject the element directly into the jQuery object
+ this.length = 1;
+ this[0] = elem;
+ }
+
+ this.context = document;
+ this.selector = selector;
+ return this;
+ }
+
+ // HANDLE: $(expr, $(...))
+ } else if ( !context || context.jquery ) {
+ return ( context || rootjQuery ).find( selector );
+
+ // HANDLE: $(expr, context)
+ // (which is just equivalent to: $(context).find(expr)
+ } else {
+ return this.constructor( context ).find( selector );
+ }
+
+ // HANDLE: $(DOMElement)
+ } else if ( selector.nodeType ) {
+ this.context = this[0] = selector;
+ this.length = 1;
+ return this;
+
+ // HANDLE: $(function)
+ // Shortcut for document ready
+ } else if ( jQuery.isFunction( selector ) ) {
+ return rootjQuery.ready( selector );
+ }
+
+ if ( selector.selector !== undefined ) {
+ this.selector = selector.selector;
+ this.context = selector.context;
+ }
+
+ return jQuery.makeArray( selector, this );
+ },
+
+ // Start with an empty selector
+ selector: "",
+
+ // The default length of a jQuery object is 0
+ length: 0,
+
+ toArray: function() {
+ return core_slice.call( this );
+ },
+
+ // Get the Nth element in the matched element set OR
+ // Get the whole matched element set as a clean array
+ get: function( num ) {
+ return num == null ?
+
+ // Return a 'clean' array
+ this.toArray() :
+
+ // Return just the object
+ ( num < 0 ? this[ this.length + num ] : this[ num ] );
+ },
+
+ // Take an array of elements and push it onto the stack
+ // (returning the new matched element set)
+ pushStack: function( elems ) {
+
+ // Build a new jQuery matched element set
+ var ret = jQuery.merge( this.constructor(), elems );
+
+ // Add the old object onto the stack (as a reference)
+ ret.prevObject = this;
+ ret.context = this.context;
+
+ // Return the newly-formed element set
+ return ret;
+ },
+
+ // Execute a callback for every element in the matched set.
+ // (You can seed the arguments with an array of args, but this is
+ // only used internally.)
+ each: function( callback, args ) {
+ return jQuery.each( this, callback, args );
+ },
+
+ ready: function( fn ) {
+ // Add the callback
+ jQuery.ready.promise().done( fn );
+
+ return this;
+ },
+
+ slice: function() {
+ return this.pushStack( core_slice.apply( this, arguments ) );
+ },
+
+ first: function() {
+ return this.eq( 0 );
+ },
+
+ last: function() {
+ return this.eq( -1 );
+ },
+
+ eq: function( i ) {
+ var len = this.length,
+ j = +i + ( i < 0 ? len : 0 );
+ return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
+ },
+
+ map: function( callback ) {
+ return this.pushStack( jQuery.map(this, function( elem, i ) {
+ return callback.call( elem, i, elem );
+ }));
+ },
+
+ end: function() {
+ return this.prevObject || this.constructor(null);
+ },
+
+ // For internal use only.
+ // Behaves like an Array's method, not like a jQuery method.
+ push: core_push,
+ sort: [].sort,
+ splice: [].splice
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+jQuery.extend = jQuery.fn.extend = function() {
+ var options, name, src, copy, copyIsArray, clone,
+ target = arguments[0] || {},
+ i = 1,
+ length = arguments.length,
+ deep = false;
+
+ // Handle a deep copy situation
+ if ( typeof target === "boolean" ) {
+ deep = target;
+ target = arguments[1] || {};
+ // skip the boolean and the target
+ i = 2;
+ }
+
+ // Handle case when target is a string or something (possible in deep copy)
+ if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+ target = {};
+ }
+
+ // extend jQuery itself if only one argument is passed
+ if ( length === i ) {
+ target = this;
+ --i;
+ }
+
+ for ( ; i < length; i++ ) {
+ // Only deal with non-null/undefined values
+ if ( (options = arguments[ i ]) != null ) {
+ // Extend the base object
+ for ( name in options ) {
+ src = target[ name ];
+ copy = options[ name ];
+
+ // Prevent never-ending loop
+ if ( target === copy ) {
+ continue;
+ }
+
+ // Recurse if we're merging plain objects or arrays
+ if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+ if ( copyIsArray ) {
+ copyIsArray = false;
+ clone = src && jQuery.isArray(src) ? src : [];
+
+ } else {
+ clone = src && jQuery.isPlainObject(src) ? src : {};
+ }
+
+ // Never move original objects, clone them
+ target[ name ] = jQuery.extend( deep, clone, copy );
+
+ // Don't bring in undefined values
+ } else if ( copy !== undefined ) {
+ target[ name ] = copy;
+ }
+ }
+ }
+ }
+
+ // Return the modified object
+ return target;
+};
+
+jQuery.extend({
+ // Unique for each copy of jQuery on the page
+ expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ),
+
+ noConflict: function( deep ) {
+ if ( window.$ === jQuery ) {
+ window.$ = _$;
+ }
+
+ if ( deep && window.jQuery === jQuery ) {
+ window.jQuery = _jQuery;
+ }
+
+ return jQuery;
+ },
+
+ // Is the DOM ready to be used? Set to true once it occurs.
+ isReady: false,
+
+ // A counter to track how many items to wait for before
+ // the ready event fires. See #6781
+ readyWait: 1,
+
+ // Hold (or release) the ready event
+ holdReady: function( hold ) {
+ if ( hold ) {
+ jQuery.readyWait++;
+ } else {
+ jQuery.ready( true );
+ }
+ },
+
+ // Handle when the DOM is ready
+ ready: function( wait ) {
+
+ // Abort if there are pending holds or we're already ready
+ if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+ return;
+ }
+
+ // Remember that the DOM is ready
+ jQuery.isReady = true;
+
+ // If a normal DOM Ready event fired, decrement, and wait if need be
+ if ( wait !== true && --jQuery.readyWait > 0 ) {
+ return;
+ }
+
+ // If there are functions bound, to execute
+ readyList.resolveWith( document, [ jQuery ] );
+
+ // Trigger any bound ready events
+ if ( jQuery.fn.trigger ) {
+ jQuery( document ).trigger("ready").off("ready");
+ }
+ },
+
+ // See test/unit/core.js for details concerning isFunction.
+ // Since version 1.3, DOM methods and functions like alert
+ // aren't supported. They return false on IE (#2968).
+ isFunction: function( obj ) {
+ return jQuery.type(obj) === "function";
+ },
+
+ isArray: Array.isArray,
+
+ isWindow: function( obj ) {
+ return obj != null && obj === obj.window;
+ },
+
+ isNumeric: function( obj ) {
+ return !isNaN( parseFloat(obj) ) && isFinite( obj );
+ },
+
+ type: function( obj ) {
+ if ( obj == null ) {
+ return String( obj );
+ }
+ // Support: Safari <= 5.1 (functionish RegExp)
+ return typeof obj === "object" || typeof obj === "function" ?
+ class2type[ core_toString.call(obj) ] || "object" :
+ typeof obj;
+ },
+
+ isPlainObject: function( obj ) {
+ // Not plain objects:
+ // - Any object or value whose internal [[Class]] property is not "[object Object]"
+ // - DOM nodes
+ // - window
+ if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+ return false;
+ }
+
+ // Support: Firefox <20
+ // The try/catch suppresses exceptions thrown when attempting to access
+ // the "constructor" property of certain host objects, ie. |window.location|
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=814622
+ try {
+ if ( obj.constructor &&
+ !core_hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
+ return false;
+ }
+ } catch ( e ) {
+ return false;
+ }
+
+ // If the function hasn't returned already, we're confident that
+ // |obj| is a plain object, created by {} or constructed with new Object
+ return true;
+ },
+
+ isEmptyObject: function( obj ) {
+ var name;
+ for ( name in obj ) {
+ return false;
+ }
+ return true;
+ },
+
+ error: function( msg ) {
+ throw new Error( msg );
+ },
+
+ // data: string of html
+ // context (optional): If specified, the fragment will be created in this context, defaults to document
+ // keepScripts (optional): If true, will include scripts passed in the html string
+ parseHTML: function( data, context, keepScripts ) {
+ if ( !data || typeof data !== "string" ) {
+ return null;
+ }
+ if ( typeof context === "boolean" ) {
+ keepScripts = context;
+ context = false;
+ }
+ context = context || document;
+
+ var parsed = rsingleTag.exec( data ),
+ scripts = !keepScripts && [];
+
+ // Single tag
+ if ( parsed ) {
+ return [ context.createElement( parsed[1] ) ];
+ }
+
+ parsed = jQuery.buildFragment( [ data ], context, scripts );
+
+ if ( scripts ) {
+ jQuery( scripts ).remove();
+ }
+
+ return jQuery.merge( [], parsed.childNodes );
+ },
+
+ parseJSON: JSON.parse,
+
+ // Cross-browser xml parsing
+ parseXML: function( data ) {
+ var xml, tmp;
+ if ( !data || typeof data !== "string" ) {
+ return null;
+ }
+
+ // Support: IE9
+ try {
+ tmp = new DOMParser();
+ xml = tmp.parseFromString( data , "text/xml" );
+ } catch ( e ) {
+ xml = undefined;
+ }
+
+ if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
+ jQuery.error( "Invalid XML: " + data );
+ }
+ return xml;
+ },
+
+ noop: function() {},
+
+ // Evaluates a script in a global context
+ globalEval: function( code ) {
+ var script,
+ indirect = eval;
+
+ code = jQuery.trim( code );
+
+ if ( code ) {
+ // If the code includes a valid, prologue position
+ // strict mode pragma, execute code by injecting a
+ // script tag into the document.
+ if ( code.indexOf("use strict") === 1 ) {
+ script = document.createElement("script");
+ script.text = code;
+ document.head.appendChild( script ).parentNode.removeChild( script );
+ } else {
+ // Otherwise, avoid the DOM node creation, insertion
+ // and removal by using an indirect global eval
+ indirect( code );
+ }
+ }
+ },
+
+ // Convert dashed to camelCase; used by the css and data modules
+ // Microsoft forgot to hump their vendor prefix (#9572)
+ camelCase: function( string ) {
+ return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+ },
+
+ nodeName: function( elem, name ) {
+ return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+ },
+
+ // args is for internal usage only
+ each: function( obj, callback, args ) {
+ var value,
+ i = 0,
+ length = obj.length,
+ isArray = isArraylike( obj );
+
+ if ( args ) {
+ if ( isArray ) {
+ for ( ; i < length; i++ ) {
+ value = callback.apply( obj[ i ], args );
+
+ if ( value === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( i in obj ) {
+ value = callback.apply( obj[ i ], args );
+
+ if ( value === false ) {
+ break;
+ }
+ }
+ }
+
+ // A special, fast, case for the most common use of each
+ } else {
+ if ( isArray ) {
+ for ( ; i < length; i++ ) {
+ value = callback.call( obj[ i ], i, obj[ i ] );
+
+ if ( value === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( i in obj ) {
+ value = callback.call( obj[ i ], i, obj[ i ] );
+
+ if ( value === false ) {
+ break;
+ }
+ }
+ }
+ }
+
+ return obj;
+ },
+
+ trim: function( text ) {
+ return text == null ? "" : core_trim.call( text );
+ },
+
+ // results is for internal usage only
+ makeArray: function( arr, results ) {
+ var ret = results || [];
+
+ if ( arr != null ) {
+ if ( isArraylike( Object(arr) ) ) {
+ jQuery.merge( ret,
+ typeof arr === "string" ?
+ [ arr ] : arr
+ );
+ } else {
+ core_push.call( ret, arr );
+ }
+ }
+
+ return ret;
+ },
+
+ inArray: function( elem, arr, i ) {
+ return arr == null ? -1 : core_indexOf.call( arr, elem, i );
+ },
+
+ merge: function( first, second ) {
+ var l = second.length,
+ i = first.length,
+ j = 0;
+
+ if ( typeof l === "number" ) {
+ for ( ; j < l; j++ ) {
+ first[ i++ ] = second[ j ];
+ }
+ } else {
+ while ( second[j] !== undefined ) {
+ first[ i++ ] = second[ j++ ];
+ }
+ }
+
+ first.length = i;
+
+ return first;
+ },
+
+ grep: function( elems, callback, inv ) {
+ var retVal,
+ ret = [],
+ i = 0,
+ length = elems.length;
+ inv = !!inv;
+
+ // Go through the array, only saving the items
+ // that pass the validator function
+ for ( ; i < length; i++ ) {
+ retVal = !!callback( elems[ i ], i );
+ if ( inv !== retVal ) {
+ ret.push( elems[ i ] );
+ }
+ }
+
+ return ret;
+ },
+
+ // arg is for internal usage only
+ map: function( elems, callback, arg ) {
+ var value,
+ i = 0,
+ length = elems.length,
+ isArray = isArraylike( elems ),
+ ret = [];
+
+ // Go through the array, translating each of the items to their
+ if ( isArray ) {
+ for ( ; i < length; i++ ) {
+ value = callback( elems[ i ], i, arg );
+
+ if ( value != null ) {
+ ret[ ret.length ] = value;
+ }
+ }
+
+ // Go through every key on the object,
+ } else {
+ for ( i in elems ) {
+ value = callback( elems[ i ], i, arg );
+
+ if ( value != null ) {
+ ret[ ret.length ] = value;
+ }
+ }
+ }
+
+ // Flatten any nested arrays
+ return core_concat.apply( [], ret );
+ },
+
+ // A global GUID counter for objects
+ guid: 1,
+
+ // Bind a function to a context, optionally partially applying any
+ // arguments.
+ proxy: function( fn, context ) {
+ var tmp, args, proxy;
+
+ if ( typeof context === "string" ) {
+ tmp = fn[ context ];
+ context = fn;
+ fn = tmp;
+ }
+
+ // Quick check to determine if target is callable, in the spec
+ // this throws a TypeError, but we will just return undefined.
+ if ( !jQuery.isFunction( fn ) ) {
+ return undefined;
+ }
+
+ // Simulated bind
+ args = core_slice.call( arguments, 2 );
+ proxy = function() {
+ return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );
+ };
+
+ // Set the guid of unique handler to the same of original handler, so it can be removed
+ proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+ return proxy;
+ },
+
+ // Multifunctional method to get and set values of a collection
+ // The value/s can optionally be executed if it's a function
+ access: function( elems, fn, key, value, chainable, emptyGet, raw ) {
+ var i = 0,
+ length = elems.length,
+ bulk = key == null;
+
+ // Sets many values
+ if ( jQuery.type( key ) === "object" ) {
+ chainable = true;
+ for ( i in key ) {
+ jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
+ }
+
+ // Sets one value
+ } else if ( value !== undefined ) {
+ chainable = true;
+
+ if ( !jQuery.isFunction( value ) ) {
+ raw = true;
+ }
+
+ if ( bulk ) {
+ // Bulk operations run against the entire set
+ if ( raw ) {
+ fn.call( elems, value );
+ fn = null;
+
+ // ...except when executing function values
+ } else {
+ bulk = fn;
+ fn = function( elem, key, value ) {
+ return bulk.call( jQuery( elem ), value );
+ };
+ }
+ }
+
+ if ( fn ) {
+ for ( ; i < length; i++ ) {
+ fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
+ }
+ }
+ }
+
+ return chainable ?
+ elems :
+
+ // Gets
+ bulk ?
+ fn.call( elems ) :
+ length ? fn( elems[0], key ) : emptyGet;
+ },
+
+ now: Date.now,
+
+ // A method for quickly swapping in/out CSS properties to get correct calculations.
+ // Note: this method belongs to the css module but it's needed here for the support module.
+ // If support gets modularized, this method should be moved back to the css module.
+ swap: function( elem, options, callback, args ) {
+ var ret, name,
+ old = {};
+
+ // Remember the old values, and insert the new ones
+ for ( name in options ) {
+ old[ name ] = elem.style[ name ];
+ elem.style[ name ] = options[ name ];
+ }
+
+ ret = callback.apply( elem, args || [] );
+
+ // Revert the old values
+ for ( name in options ) {
+ elem.style[ name ] = old[ name ];
+ }
+
+ return ret;
+ }
+});
+
+jQuery.ready.promise = function( obj ) {
+ if ( !readyList ) {
+
+ readyList = jQuery.Deferred();
+
+ // Catch cases where $(document).ready() is called after the browser event has already occurred.
+ // we once tried to use readyState "interactive" here, but it caused issues like the one
+ // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
+ if ( document.readyState === "complete" ) {
+ // Handle it asynchronously to allow scripts the opportunity to delay ready
+ setTimeout( jQuery.ready );
+
+ } else {
+
+ // Use the handy event callback
+ document.addEventListener( "DOMContentLoaded", completed, false );
+
+ // A fallback to window.onload, that will always work
+ window.addEventListener( "load", completed, false );
+ }
+ }
+ return readyList.promise( obj );
+};
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
+ class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+function isArraylike( obj ) {
+ var length = obj.length,
+ type = jQuery.type( obj );
+
+ if ( jQuery.isWindow( obj ) ) {
+ return false;
+ }
+
+ if ( obj.nodeType === 1 && length ) {
+ return true;
+ }
+
+ return type === "array" || type !== "function" &&
+ ( length === 0 ||
+ typeof length === "number" && length > 0 && ( length - 1 ) in obj );
+}
+
+// All jQuery objects should point back to these
+rootjQuery = jQuery(document);
+/*!
+ * Sizzle CSS Selector Engine v1.9.4-pre
+ * http://sizzlejs.com/
+ *
+ * Copyright 2013 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2013-06-03
+ */
+(function( window, undefined ) {
+
+var i,
+ support,
+ cachedruns,
+ Expr,
+ getText,
+ isXML,
+ compile,
+ outermostContext,
+ sortInput,
+
+ // Local document vars
+ setDocument,
+ document,
+ docElem,
+ documentIsHTML,
+ rbuggyQSA,
+ rbuggyMatches,
+ matches,
+ contains,
+
+ // Instance-specific data
+ expando = "sizzle" + -(new Date()),
+ preferredDoc = window.document,
+ dirruns = 0,
+ done = 0,
+ classCache = createCache(),
+ tokenCache = createCache(),
+ compilerCache = createCache(),
+ hasDuplicate = false,
+ sortOrder = function( a, b ) {
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+ }
+ return 0;
+ },
+
+ // General-purpose constants
+ strundefined = typeof undefined,
+ MAX_NEGATIVE = 1 << 31,
+
+ // Instance methods
+ hasOwn = ({}).hasOwnProperty,
+ arr = [],
+ pop = arr.pop,
+ push_native = arr.push,
+ push = arr.push,
+ slice = arr.slice,
+ // Use a stripped-down indexOf if we can't use a native one
+ indexOf = arr.indexOf || function( elem ) {
+ var i = 0,
+ len = this.length;
+ for ( ; i < len; i++ ) {
+ if ( this[i] === elem ) {
+ return i;
+ }
+ }
+ return -1;
+ },
+
+ booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
+
+ // Regular expressions
+
+ // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
+ whitespace = "[\\x20\\t\\r\\n\\f]",
+ // http://www.w3.org/TR/css3-syntax/#characters
+ characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
+
+ // Loosely modeled on CSS identifier characters
+ // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
+ // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+ identifier = characterEncoding.replace( "w", "w#" ),
+
+ // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
+ attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
+ "*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",
+
+ // Prefer arguments quoted,
+ // then not containing pseudos/brackets,
+ // then attribute selectors/non-parenthetical expressions,
+ // then anything else
+ // These preferences are here to reduce the number of selectors
+ // needing tokenize in the PSEUDO preFilter
+ pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)",
+
+ // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+ rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+ rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+ rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
+
+ rsibling = new RegExp( whitespace + "*[+~]" ),
+ rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*)" + whitespace + "*\\]", "g" ),
+
+ rpseudo = new RegExp( pseudos ),
+ ridentifier = new RegExp( "^" + identifier + "$" ),
+
+ matchExpr = {
+ "ID": new RegExp( "^#(" + characterEncoding + ")" ),
+ "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
+ "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
+ "ATTR": new RegExp( "^" + attributes ),
+ "PSEUDO": new RegExp( "^" + pseudos ),
+ "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+ "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+ "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+ "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+ // For use in libraries implementing .is()
+ // We use this for POS matching in `select`
+ "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+ whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+ },
+
+ rnative = /^[^{]+\{\s*\[native \w/,
+
+ // Easily-parseable/retrievable ID or TAG or CLASS selectors
+ rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+ rinputs = /^(?:input|select|textarea|button)$/i,
+ rheader = /^h\d$/i,
+
+ rescape = /'|\\/g,
+
+ // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+ runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
+ funescape = function( _, escaped, escapedWhitespace ) {
+ var high = "0x" + escaped - 0x10000;
+ // NaN means non-codepoint
+ // Support: Firefox
+ // Workaround erroneous numeric interpretation of +"0x"
+ return high !== high || escapedWhitespace ?
+ escaped :
+ // BMP codepoint
+ high < 0 ?
+ String.fromCharCode( high + 0x10000 ) :
+ // Supplemental Plane codepoint (surrogate pair)
+ String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+ };
+
+// Optimize for push.apply( _, NodeList )
+try {
+ push.apply(
+ (arr = slice.call( preferredDoc.childNodes )),
+ preferredDoc.childNodes
+ );
+ // Support: Android<4.0
+ // Detect silently failing push.apply
+ arr[ preferredDoc.childNodes.length ].nodeType;
+} catch ( e ) {
+ push = { apply: arr.length ?
+
+ // Leverage slice if possible
+ function( target, els ) {
+ push_native.apply( target, slice.call(els) );
+ } :
+
+ // Support: IE<9
+ // Otherwise append directly
+ function( target, els ) {
+ var j = target.length,
+ i = 0;
+ // Can't trust NodeList.length
+ while ( (target[j++] = els[i++]) ) {}
+ target.length = j - 1;
+ }
+ };
+}
+
+function Sizzle( selector, context, results, seed ) {
+ var match, elem, m, nodeType,
+ // QSA vars
+ i, groups, old, nid, newContext, newSelector;
+
+ if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+ setDocument( context );
+ }
+
+ context = context || document;
+ results = results || [];
+
+ if ( !selector || typeof selector !== "string" ) {
+ return results;
+ }
+
+ if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
+ return [];
+ }
+
+ if ( documentIsHTML && !seed ) {
+
+ // Shortcuts
+ if ( (match = rquickExpr.exec( selector )) ) {
+ // Speed-up: Sizzle("#ID")
+ if ( (m = match[1]) ) {
+ if ( nodeType === 9 ) {
+ elem = context.getElementById( m );
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ if ( elem && elem.parentNode ) {
+ // Handle the case where IE, Opera, and Webkit return items
+ // by name instead of ID
+ if ( elem.id === m ) {
+ results.push( elem );
+ return results;
+ }
+ } else {
+ return results;
+ }
+ } else {
+ // Context is not a document
+ if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
+ contains( context, elem ) && elem.id === m ) {
+ results.push( elem );
+ return results;
+ }
+ }
+
+ // Speed-up: Sizzle("TAG")
+ } else if ( match[2] ) {
+ push.apply( results, context.getElementsByTagName( selector ) );
+ return results;
+
+ // Speed-up: Sizzle(".CLASS")
+ } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {
+ push.apply( results, context.getElementsByClassName( m ) );
+ return results;
+ }
+ }
+
+ // QSA path
+ if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
+ nid = old = expando;
+ newContext = context;
+ newSelector = nodeType === 9 && selector;
+
+ // qSA works strangely on Element-rooted queries
+ // We can work around this by specifying an extra ID on the root
+ // and working up from there (Thanks to Andrew Dupont for the technique)
+ // IE 8 doesn't work on object elements
+ if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+ groups = tokenize( selector );
+
+ if ( (old = context.getAttribute("id")) ) {
+ nid = old.replace( rescape, "\\$&" );
+ } else {
+ context.setAttribute( "id", nid );
+ }
+ nid = "[id='" + nid + "'] ";
+
+ i = groups.length;
+ while ( i-- ) {
+ groups[i] = nid + toSelector( groups[i] );
+ }
+ newContext = rsibling.test( selector ) && context.parentNode || context;
+ newSelector = groups.join(",");
+ }
+
+ if ( newSelector ) {
+ try {
+ push.apply( results,
+ newContext.querySelectorAll( newSelector )
+ );
+ return results;
+ } catch(qsaError) {
+ } finally {
+ if ( !old ) {
+ context.removeAttribute("id");
+ }
+ }
+ }
+ }
+ }
+
+ // All others
+ return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
+ * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ * deleting the oldest entry
+ */
+function createCache() {
+ var keys = [];
+
+ function cache( key, value ) {
+ // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+ if ( keys.push( key += " " ) > Expr.cacheLength ) {
+ // Only keep the most recent entries
+ delete cache[ keys.shift() ];
+ }
+ return (cache[ key ] = value);
+ }
+ return cache;
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+ fn[ expando ] = true;
+ return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created div and expects a boolean result
+ */
+function assert( fn ) {
+ var div = document.createElement("div");
+
+ try {
+ return !!fn( div );
+ } catch (e) {
+ return false;
+ } finally {
+ // Remove from its parent by default
+ if ( div.parentNode ) {
+ div.parentNode.removeChild( div );
+ }
+ // release memory in IE
+ div = null;
+ }
+}
+
+/**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+function addHandle( attrs, handler ) {
+ var arr = attrs.split("|"),
+ i = attrs.length;
+
+ while ( i-- ) {
+ Expr.attrHandle[ arr[i] ] = handler;
+ }
+}
+
+/**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+function siblingCheck( a, b ) {
+ var cur = b && a,
+ diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+ ( ~b.sourceIndex || MAX_NEGATIVE ) -
+ ( ~a.sourceIndex || MAX_NEGATIVE );
+
+ // Use IE sourceIndex if available on both nodes
+ if ( diff ) {
+ return diff;
+ }
+
+ // Check if b follows a
+ if ( cur ) {
+ while ( (cur = cur.nextSibling) ) {
+ if ( cur === b ) {
+ return -1;
+ }
+ }
+ }
+
+ return a ? 1 : -1;
+}
+
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+function createInputPseudo( type ) {
+ return function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && elem.type === type;
+ };
+}
+
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+function createButtonPseudo( type ) {
+ return function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return (name === "input" || name === "button") && elem.type === type;
+ };
+}
+
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+function createPositionalPseudo( fn ) {
+ return markFunction(function( argument ) {
+ argument = +argument;
+ return markFunction(function( seed, matches ) {
+ var j,
+ matchIndexes = fn( [], seed.length, argument ),
+ i = matchIndexes.length;
+
+ // Match elements found at the specified indexes
+ while ( i-- ) {
+ if ( seed[ (j = matchIndexes[i]) ] ) {
+ seed[j] = !(matches[j] = seed[j]);
+ }
+ }
+ });
+ });
+}
+
+/**
+ * Detect xml
+ * @param {Element|Object} elem An element or a document
+ */
+isXML = Sizzle.isXML = function( elem ) {
+ // documentElement is verified for cases where it doesn't yet exist
+ // (such as loading iframes in IE - #4833)
+ var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+ return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+ var doc = node ? node.ownerDocument || node : preferredDoc,
+ parent = doc.defaultView;
+
+ // If no document and documentElement is available, return
+ if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+ return document;
+ }
+
+ // Set our document
+ document = doc;
+ docElem = doc.documentElement;
+
+ // Support tests
+ documentIsHTML = !isXML( doc );
+
+ // Support: IE>8
+ // If iframe document is assigned to "document" variable and if iframe has been reloaded,
+ // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
+ // IE6-8 do not support the defaultView property so parent will be undefined
+ if ( parent && parent.attachEvent && parent !== parent.top ) {
+ parent.attachEvent( "onbeforeunload", function() {
+ setDocument();
+ });
+ }
+
+ /* Attributes
+ ---------------------------------------------------------------------- */
+
+ // Support: IE<8
+ // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)
+ support.attributes = assert(function( div ) {
+ div.className = "i";
+ return !div.getAttribute("className");
+ });
+
+ /* getElement(s)By*
+ ---------------------------------------------------------------------- */
+
+ // Check if getElementsByTagName("*") returns only elements
+ support.getElementsByTagName = assert(function( div ) {
+ div.appendChild( doc.createComment("") );
+ return !div.getElementsByTagName("*").length;
+ });
+
+ // Check if getElementsByClassName can be trusted
+ support.getElementsByClassName = assert(function( div ) {
+ div.innerHTML = "<div class='a'></div><div class='a i'></div>";
+
+ // Support: Safari<4
+ // Catch class over-caching
+ div.firstChild.className = "i";
+ // Support: Opera<10
+ // Catch gEBCN failure to find non-leading classes
+ return div.getElementsByClassName("i").length === 2;
+ });
+
+ // Support: IE<10
+ // Check if getElementById returns elements by name
+ // The broken getElementById methods don't pick up programatically-set names,
+ // so use a roundabout getElementsByName test
+ support.getById = assert(function( div ) {
+ docElem.appendChild( div ).id = expando;
+ return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
+ });
+
+ // ID find and filter
+ if ( support.getById ) {
+ Expr.find["ID"] = function( id, context ) {
+ if ( typeof context.getElementById !== strundefined && documentIsHTML ) {
+ var m = context.getElementById( id );
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ return m && m.parentNode ? [m] : [];
+ }
+ };
+ Expr.filter["ID"] = function( id ) {
+ var attrId = id.replace( runescape, funescape );
+ return function( elem ) {
+ return elem.getAttribute("id") === attrId;
+ };
+ };
+ } else {
+ // Support: IE6/7
+ // getElementById is not reliable as a find shortcut
+ delete Expr.find["ID"];
+
+ Expr.filter["ID"] = function( id ) {
+ var attrId = id.replace( runescape, funescape );
+ return function( elem ) {
+ var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
+ return node && node.value === attrId;
+ };
+ };
+ }
+
+ // Tag
+ Expr.find["TAG"] = support.getElementsByTagName ?
+ function( tag, context ) {
+ if ( typeof context.getElementsByTagName !== strundefined ) {
+ return context.getElementsByTagName( tag );
+ }
+ } :
+ function( tag, context ) {
+ var elem,
+ tmp = [],
+ i = 0,
+ results = context.getElementsByTagName( tag );
+
+ // Filter out possible comments
+ if ( tag === "*" ) {
+ while ( (elem = results[i++]) ) {
+ if ( elem.nodeType === 1 ) {
+ tmp.push( elem );
+ }
+ }
+
+ return tmp;
+ }
+ return results;
+ };
+
+ // Class
+ Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
+ if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {
+ return context.getElementsByClassName( className );
+ }
+ };
+
+ /* QSA/matchesSelector
+ ---------------------------------------------------------------------- */
+
+ // QSA and matchesSelector support
+
+ // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+ rbuggyMatches = [];
+
+ // qSa(:focus) reports false when true (Chrome 21)
+ // We allow this because of a bug in IE8/9 that throws an error
+ // whenever `document.activeElement` is accessed on an iframe
+ // So, we allow :focus to pass through QSA all the time to avoid the IE error
+ // See http://bugs.jquery.com/ticket/13378
+ rbuggyQSA = [];
+
+ if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
+ // Build QSA regex
+ // Regex strategy adopted from Diego Perini
+ assert(function( div ) {
+ // Select is set to empty string on purpose
+ // This is to test IE's treatment of not explicitly
+ // setting a boolean content attribute,
+ // since its presence should be enough
+ // http://bugs.jquery.com/ticket/12359
+ div.innerHTML = "<select><option selected=''></option></select>";
+
+ // Support: IE8
+ // Boolean attributes and "value" are not treated correctly
+ if ( !div.querySelectorAll("[selected]").length ) {
+ rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
+ }
+
+ // Webkit/Opera - :checked should return selected option elements
+ // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+ // IE8 throws error here and will not see later tests
+ if ( !div.querySelectorAll(":checked").length ) {
+ rbuggyQSA.push(":checked");
+ }
+ });
+
+ assert(function( div ) {
+
+ // Support: Opera 10-12/IE8
+ // ^= $= *= and empty values
+ // Should not select anything
+ // Support: Windows 8 Native Apps
+ // The type attribute is restricted during .innerHTML assignment
+ var input = doc.createElement("input");
+ input.setAttribute( "type", "hidden" );
+ div.appendChild( input ).setAttribute( "t", "" );
+
+ if ( div.querySelectorAll("[t^='']").length ) {
+ rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+ }
+
+ // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+ // IE8 throws error here and will not see later tests
+ if ( !div.querySelectorAll(":enabled").length ) {
+ rbuggyQSA.push( ":enabled", ":disabled" );
+ }
+
+ // Opera 10-11 does not throw on post-comma invalid pseudos
+ div.querySelectorAll("*,:x");
+ rbuggyQSA.push(",.*:");
+ });
+ }
+
+ if ( (support.matchesSelector = rnative.test( (matches = docElem.webkitMatchesSelector ||
+ docElem.mozMatchesSelector ||
+ docElem.oMatchesSelector ||
+ docElem.msMatchesSelector) )) ) {
+
+ assert(function( div ) {
+ // Check to see if it's possible to do matchesSelector
+ // on a disconnected node (IE 9)
+ support.disconnectedMatch = matches.call( div, "div" );
+
+ // This should fail with an exception
+ // Gecko does not error, returns false instead
+ matches.call( div, "[s!='']:x" );
+ rbuggyMatches.push( "!=", pseudos );
+ });
+ }
+
+ rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
+ rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
+
+ /* Contains
+ ---------------------------------------------------------------------- */
+
+ // Element contains another
+ // Purposefully does not implement inclusive descendent
+ // As in, an element does not contain itself
+ contains = rnative.test( docElem.contains ) || docElem.compareDocumentPosition ?
+ function( a, b ) {
+ var adown = a.nodeType === 9 ? a.documentElement : a,
+ bup = b && b.parentNode;
+ return a === bup || !!( bup && bup.nodeType === 1 && (
+ adown.contains ?
+ adown.contains( bup ) :
+ a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+ ));
+ } :
+ function( a, b ) {
+ if ( b ) {
+ while ( (b = b.parentNode) ) {
+ if ( b === a ) {
+ return true;
+ }
+ }
+ }
+ return false;
+ };
+
+ /* Sorting
+ ---------------------------------------------------------------------- */
+
+ // Document order sorting
+ sortOrder = docElem.compareDocumentPosition ?
+ function( a, b ) {
+
+ // Flag for duplicate removal
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+ }
+
+ var compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b );
+
+ if ( compare ) {
+ // Disconnected nodes
+ if ( compare & 1 ||
+ (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
+
+ // Choose the first element that is related to our preferred document
+ if ( a === doc || contains(preferredDoc, a) ) {
+ return -1;
+ }
+ if ( b === doc || contains(preferredDoc, b) ) {
+ return 1;
+ }
+
+ // Maintain original order
+ return sortInput ?
+ ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
+ 0;
+ }
+
+ return compare & 4 ? -1 : 1;
+ }
+
+ // Not directly comparable, sort on existence of method
+ return a.compareDocumentPosition ? -1 : 1;
+ } :
+ function( a, b ) {
+ var cur,
+ i = 0,
+ aup = a.parentNode,
+ bup = b.parentNode,
+ ap = [ a ],
+ bp = [ b ];
+
+ // Exit early if the nodes are identical
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+
+ // Parentless nodes are either documents or disconnected
+ } else if ( !aup || !bup ) {
+ return a === doc ? -1 :
+ b === doc ? 1 :
+ aup ? -1 :
+ bup ? 1 :
+ sortInput ?
+ ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
+ 0;
+
+ // If the nodes are siblings, we can do a quick check
+ } else if ( aup === bup ) {
+ return siblingCheck( a, b );
+ }
+
+ // Otherwise we need full lists of their ancestors for comparison
+ cur = a;
+ while ( (cur = cur.parentNode) ) {
+ ap.unshift( cur );
+ }
+ cur = b;
+ while ( (cur = cur.parentNode) ) {
+ bp.unshift( cur );
+ }
+
+ // Walk down the tree looking for a discrepancy
+ while ( ap[i] === bp[i] ) {
+ i++;
+ }
+
+ return i ?
+ // Do a sibling check if the nodes have a common ancestor
+ siblingCheck( ap[i], bp[i] ) :
+
+ // Otherwise nodes in our document sort first
+ ap[i] === preferredDoc ? -1 :
+ bp[i] === preferredDoc ? 1 :
+ 0;
+ };
+
+ return doc;
+};
+
+Sizzle.matches = function( expr, elements ) {
+ return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+ // Set document vars if needed
+ if ( ( elem.ownerDocument || elem ) !== document ) {
+ setDocument( elem );
+ }
+
+ // Make sure that attribute selectors are quoted
+ expr = expr.replace( rattributeQuotes, "='$1']" );
+
+ if ( support.matchesSelector && documentIsHTML &&
+ ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+ ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
+
+ try {
+ var ret = matches.call( elem, expr );
+
+ // IE 9's matchesSelector returns false on disconnected nodes
+ if ( ret || support.disconnectedMatch ||
+ // As well, disconnected nodes are said to be in a document
+ // fragment in IE 9
+ elem.document && elem.document.nodeType !== 11 ) {
+ return ret;
+ }
+ } catch(e) {}
+ }
+
+ return Sizzle( expr, document, null, [elem] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+ // Set document vars if needed
+ if ( ( context.ownerDocument || context ) !== document ) {
+ setDocument( context );
+ }
+ return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+ // Set document vars if needed
+ if ( ( elem.ownerDocument || elem ) !== document ) {
+ setDocument( elem );
+ }
+
+ var fn = Expr.attrHandle[ name.toLowerCase() ],
+ // Don't get fooled by Object.prototype properties (jQuery #13807)
+ val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+ fn( elem, name, !documentIsHTML ) :
+ undefined;
+
+ return val === undefined ?
+ support.attributes || !documentIsHTML ?
+ elem.getAttribute( name ) :
+ (val = elem.getAttributeNode(name)) && val.specified ?
+ val.value :
+ null :
+ val;
+};
+
+Sizzle.error = function( msg ) {
+ throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+Sizzle.uniqueSort = function( results ) {
+ var elem,
+ duplicates = [],
+ j = 0,
+ i = 0;
+
+ // Unless we *know* we can detect duplicates, assume their presence
+ hasDuplicate = !support.detectDuplicates;
+ sortInput = !support.sortStable && results.slice( 0 );
+ results.sort( sortOrder );
+
+ if ( hasDuplicate ) {
+ while ( (elem = results[i++]) ) {
+ if ( elem === results[ i ] ) {
+ j = duplicates.push( i );
+ }
+ }
+ while ( j-- ) {
+ results.splice( duplicates[ j ], 1 );
+ }
+ }
+
+ return results;
+};
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+ var node,
+ ret = "",
+ i = 0,
+ nodeType = elem.nodeType;
+
+ if ( !nodeType ) {
+ // If no nodeType, this is expected to be an array
+ for ( ; (node = elem[i]); i++ ) {
+ // Do not traverse comment nodes
+ ret += getText( node );
+ }
+ } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+ // Use textContent for elements
+ // innerText usage removed for consistency of new lines (see #11153)
+ if ( typeof elem.textContent === "string" ) {
+ return elem.textContent;
+ } else {
+ // Traverse its children
+ for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+ ret += getText( elem );
+ }
+ }
+ } else if ( nodeType === 3 || nodeType === 4 ) {
+ return elem.nodeValue;
+ }
+ // Do not include comment or processing instruction nodes
+
+ return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+ // Can be adjusted by the user
+ cacheLength: 50,
+
+ createPseudo: markFunction,
+
+ match: matchExpr,
+
+ attrHandle: {},
+
+ find: {},
+
+ relative: {
+ ">": { dir: "parentNode", first: true },
+ " ": { dir: "parentNode" },
+ "+": { dir: "previousSibling", first: true },
+ "~": { dir: "previousSibling" }
+ },
+
+ preFilter: {
+ "ATTR": function( match ) {
+ match[1] = match[1].replace( runescape, funescape );
+
+ // Move the given value to match[3] whether quoted or unquoted
+ match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape );
+
+ if ( match[2] === "~=" ) {
+ match[3] = " " + match[3] + " ";
+ }
+
+ return match.slice( 0, 4 );
+ },
+
+ "CHILD": function( match ) {
+ /* matches from matchExpr["CHILD"]
+ 1 type (only|nth|...)
+ 2 what (child|of-type)
+ 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+ 4 xn-component of xn+y argument ([+-]?\d*n|)
+ 5 sign of xn-component
+ 6 x of xn-component
+ 7 sign of y-component
+ 8 y of y-component
+ */
+ match[1] = match[1].toLowerCase();
+
+ if ( match[1].slice( 0, 3 ) === "nth" ) {
+ // nth-* requires argument
+ if ( !match[3] ) {
+ Sizzle.error( match[0] );
+ }
+
+ // numeric x and y parameters for Expr.filter.CHILD
+ // remember that false/true cast respectively to 0/1
+ match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+ match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+ // other types prohibit arguments
+ } else if ( match[3] ) {
+ Sizzle.error( match[0] );
+ }
+
+ return match;
+ },
+
+ "PSEUDO": function( match ) {
+ var excess,
+ unquoted = !match[5] && match[2];
+
+ if ( matchExpr["CHILD"].test( match[0] ) ) {
+ return null;
+ }
+
+ // Accept quoted arguments as-is
+ if ( match[3] && match[4] !== undefined ) {
+ match[2] = match[4];
+
+ // Strip excess characters from unquoted arguments
+ } else if ( unquoted && rpseudo.test( unquoted ) &&
+ // Get excess from tokenize (recursively)
+ (excess = tokenize( unquoted, true )) &&
+ // advance to the next closing parenthesis
+ (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+
+ // excess is a negative index
+ match[0] = match[0].slice( 0, excess );
+ match[2] = unquoted.slice( 0, excess );
+ }
+
+ // Return only captures needed by the pseudo filter method (type and argument)
+ return match.slice( 0, 3 );
+ }
+ },
+
+ filter: {
+
+ "TAG": function( nodeNameSelector ) {
+ var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
+ return nodeNameSelector === "*" ?
+ function() { return true; } :
+ function( elem ) {
+ return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+ };
+ },
+
+ "CLASS": function( className ) {
+ var pattern = classCache[ className + " " ];
+
+ return pattern ||
+ (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+ classCache( className, function( elem ) {
+ return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" );
+ });
+ },
+
+ "ATTR": function( name, operator, check ) {
+ return function( elem ) {
+ var result = Sizzle.attr( elem, name );
+
+ if ( result == null ) {
+ return operator === "!=";
+ }
+ if ( !operator ) {
+ return true;
+ }
+
+ result += "";
+
+ return operator === "=" ? result === check :
+ operator === "!=" ? result !== check :
+ operator === "^=" ? check && result.indexOf( check ) === 0 :
+ operator === "*=" ? check && result.indexOf( check ) > -1 :
+ operator === "$=" ? check && result.slice( -check.length ) === check :
+ operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
+ operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+ false;
+ };
+ },
+
+ "CHILD": function( type, what, argument, first, last ) {
+ var simple = type.slice( 0, 3 ) !== "nth",
+ forward = type.slice( -4 ) !== "last",
+ ofType = what === "of-type";
+
+ return first === 1 && last === 0 ?
+
+ // Shortcut for :nth-*(n)
+ function( elem ) {
+ return !!elem.parentNode;
+ } :
+
+ function( elem, context, xml ) {
+ var cache, outerCache, node, diff, nodeIndex, start,
+ dir = simple !== forward ? "nextSibling" : "previousSibling",
+ parent = elem.parentNode,
+ name = ofType && elem.nodeName.toLowerCase(),
+ useCache = !xml && !ofType;
+
+ if ( parent ) {
+
+ // :(first|last|only)-(child|of-type)
+ if ( simple ) {
+ while ( dir ) {
+ node = elem;
+ while ( (node = node[ dir ]) ) {
+ if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
+ return false;
+ }
+ }
+ // Reverse direction for :only-* (if we haven't yet done so)
+ start = dir = type === "only" && !start && "nextSibling";
+ }
+ return true;
+ }
+
+ start = [ forward ? parent.firstChild : parent.lastChild ];
+
+ // non-xml :nth-child(...) stores cache data on `parent`
+ if ( forward && useCache ) {
+ // Seek `elem` from a previously-cached index
+ outerCache = parent[ expando ] || (parent[ expando ] = {});
+ cache = outerCache[ type ] || [];
+ nodeIndex = cache[0] === dirruns && cache[1];
+ diff = cache[0] === dirruns && cache[2];
+ node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+ while ( (node = ++nodeIndex && node && node[ dir ] ||
+
+ // Fallback to seeking `elem` from the start
+ (diff = nodeIndex = 0) || start.pop()) ) {
+
+ // When found, cache indexes on `parent` and break
+ if ( node.nodeType === 1 && ++diff && node === elem ) {
+ outerCache[ type ] = [ dirruns, nodeIndex, diff ];
+ break;
+ }
+ }
+
+ // Use previously-cached element index if available
+ } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
+ diff = cache[1];
+
+ // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
+ } else {
+ // Use the same loop as above to seek `elem` from the start
+ while ( (node = ++nodeIndex && node && node[ dir ] ||
+ (diff = nodeIndex = 0) || start.pop()) ) {
+
+ if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
+ // Cache the index of each encountered element
+ if ( useCache ) {
+ (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
+ }
+
+ if ( node === elem ) {
+ break;
+ }
+ }
+ }
+ }
+
+ // Incorporate the offset, then check against cycle size
+ diff -= last;
+ return diff === first || ( diff % first === 0 && diff / first >= 0 );
+ }
+ };
+ },
+
+ "PSEUDO": function( pseudo, argument ) {
+ // pseudo-class names are case-insensitive
+ // http://www.w3.org/TR/selectors/#pseudo-classes
+ // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+ // Remember that setFilters inherits from pseudos
+ var args,
+ fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+ Sizzle.error( "unsupported pseudo: " + pseudo );
+
+ // The user may use createPseudo to indicate that
+ // arguments are needed to create the filter function
+ // just as Sizzle does
+ if ( fn[ expando ] ) {
+ return fn( argument );
+ }
+
+ // But maintain support for old signatures
+ if ( fn.length > 1 ) {
+ args = [ pseudo, pseudo, "", argument ];
+ return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+ markFunction(function( seed, matches ) {
+ var idx,
+ matched = fn( seed, argument ),
+ i = matched.length;
+ while ( i-- ) {
+ idx = indexOf.call( seed, matched[i] );
+ seed[ idx ] = !( matches[ idx ] = matched[i] );
+ }
+ }) :
+ function( elem ) {
+ return fn( elem, 0, args );
+ };
+ }
+
+ return fn;
+ }
+ },
+
+ pseudos: {
+ // Potentially complex pseudos
+ "not": markFunction(function( selector ) {
+ // Trim the selector passed to compile
+ // to avoid treating leading and trailing
+ // spaces as combinators
+ var input = [],
+ results = [],
+ matcher = compile( selector.replace( rtrim, "$1" ) );
+
+ return matcher[ expando ] ?
+ markFunction(function( seed, matches, context, xml ) {
+ var elem,
+ unmatched = matcher( seed, null, xml, [] ),
+ i = seed.length;
+
+ // Match elements unmatched by `matcher`
+ while ( i-- ) {
+ if ( (elem = unmatched[i]) ) {
+ seed[i] = !(matches[i] = elem);
+ }
+ }
+ }) :
+ function( elem, context, xml ) {
+ input[0] = elem;
+ matcher( input, null, xml, results );
+ return !results.pop();
+ };
+ }),
+
+ "has": markFunction(function( selector ) {
+ return function( elem ) {
+ return Sizzle( selector, elem ).length > 0;
+ };
+ }),
+
+ "contains": markFunction(function( text ) {
+ return function( elem ) {
+ return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+ };
+ }),
+
+ // "Whether an element is represented by a :lang() selector
+ // is based solely on the element's language value
+ // being equal to the identifier C,
+ // or beginning with the identifier C immediately followed by "-".
+ // The matching of C against the element's language value is performed case-insensitively.
+ // The identifier C does not have to be a valid language name."
+ // http://www.w3.org/TR/selectors/#lang-pseudo
+ "lang": markFunction( function( lang ) {
+ // lang value must be a valid identifier
+ if ( !ridentifier.test(lang || "") ) {
+ Sizzle.error( "unsupported lang: " + lang );
+ }
+ lang = lang.replace( runescape, funescape ).toLowerCase();
+ return function( elem ) {
+ var elemLang;
+ do {
+ if ( (elemLang = documentIsHTML ?
+ elem.lang :
+ elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
+
+ elemLang = elemLang.toLowerCase();
+ return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+ }
+ } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+ return false;
+ };
+ }),
+
+ // Miscellaneous
+ "target": function( elem ) {
+ var hash = window.location && window.location.hash;
+ return hash && hash.slice( 1 ) === elem.id;
+ },
+
+ "root": function( elem ) {
+ return elem === docElem;
+ },
+
+ "focus": function( elem ) {
+ return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+ },
+
+ // Boolean properties
+ "enabled": function( elem ) {
+ return elem.disabled === false;
+ },
+
+ "disabled": function( elem ) {
+ return elem.disabled === true;
+ },
+
+ "checked": function( elem ) {
+ // In CSS3, :checked should return both checked and selected elements
+ // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+ var nodeName = elem.nodeName.toLowerCase();
+ return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+ },
+
+ "selected": function( elem ) {
+ // Accessing this property makes selected-by-default
+ // options in Safari work properly
+ if ( elem.parentNode ) {
+ elem.parentNode.selectedIndex;
+ }
+
+ return elem.selected === true;
+ },
+
+ // Contents
+ "empty": function( elem ) {
+ // http://www.w3.org/TR/selectors/#empty-pseudo
+ // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),
+ // not comment, processing instructions, or others
+ // Thanks to Diego Perini for the nodeName shortcut
+ // Greater than "@" means alpha characters (specifically not starting with "#" or "?")
+ for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+ if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) {
+ return false;
+ }
+ }
+ return true;
+ },
+
+ "parent": function( elem ) {
+ return !Expr.pseudos["empty"]( elem );
+ },
+
+ // Element/input types
+ "header": function( elem ) {
+ return rheader.test( elem.nodeName );
+ },
+
+ "input": function( elem ) {
+ return rinputs.test( elem.nodeName );
+ },
+
+ "button": function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && elem.type === "button" || name === "button";
+ },
+
+ "text": function( elem ) {
+ var attr;
+ // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
+ // use getAttribute instead to test this case
+ return elem.nodeName.toLowerCase() === "input" &&
+ elem.type === "text" &&
+ ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type );
+ },
+
+ // Position-in-collection
+ "first": createPositionalPseudo(function() {
+ return [ 0 ];
+ }),
+
+ "last": createPositionalPseudo(function( matchIndexes, length ) {
+ return [ length - 1 ];
+ }),
+
+ "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ return [ argument < 0 ? argument + length : argument ];
+ }),
+
+ "even": createPositionalPseudo(function( matchIndexes, length ) {
+ var i = 0;
+ for ( ; i < length; i += 2 ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ }),
+
+ "odd": createPositionalPseudo(function( matchIndexes, length ) {
+ var i = 1;
+ for ( ; i < length; i += 2 ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ }),
+
+ "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ var i = argument < 0 ? argument + length : argument;
+ for ( ; --i >= 0; ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ }),
+
+ "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+ var i = argument < 0 ? argument + length : argument;
+ for ( ; ++i < length; ) {
+ matchIndexes.push( i );
+ }
+ return matchIndexes;
+ })
+ }
+};
+
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+ Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+ Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+// Easy API for creating new setFilters
+function setFilters() {}
+setFilters.prototype = Expr.filters = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+function tokenize( selector, parseOnly ) {
+ var matched, match, tokens, type,
+ soFar, groups, preFilters,
+ cached = tokenCache[ selector + " " ];
+
+ if ( cached ) {
+ return parseOnly ? 0 : cached.slice( 0 );
+ }
+
+ soFar = selector;
+ groups = [];
+ preFilters = Expr.preFilter;
+
+ while ( soFar ) {
+
+ // Comma and first run
+ if ( !matched || (match = rcomma.exec( soFar )) ) {
+ if ( match ) {
+ // Don't consume trailing commas as valid
+ soFar = soFar.slice( match[0].length ) || soFar;
+ }
+ groups.push( tokens = [] );
+ }
+
+ matched = false;
+
+ // Combinators
+ if ( (match = rcombinators.exec( soFar )) ) {
+ matched = match.shift();
+ tokens.push({
+ value: matched,
+ // Cast descendant combinators to space
+ type: match[0].replace( rtrim, " " )
+ });
+ soFar = soFar.slice( matched.length );
+ }
+
+ // Filters
+ for ( type in Expr.filter ) {
+ if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+ (match = preFilters[ type ]( match ))) ) {
+ matched = match.shift();
+ tokens.push({
+ value: matched,
+ type: type,
+ matches: match
+ });
+ soFar = soFar.slice( matched.length );
+ }
+ }
+
+ if ( !matched ) {
+ break;
+ }
+ }
+
+ // Return the length of the invalid excess
+ // if we're just parsing
+ // Otherwise, throw an error or return tokens
+ return parseOnly ?
+ soFar.length :
+ soFar ?
+ Sizzle.error( selector ) :
+ // Cache the tokens
+ tokenCache( selector, groups ).slice( 0 );
+}
+
+function toSelector( tokens ) {
+ var i = 0,
+ len = tokens.length,
+ selector = "";
+ for ( ; i < len; i++ ) {
+ selector += tokens[i].value;
+ }
+ return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+ var dir = combinator.dir,
+ checkNonElements = base && dir === "parentNode",
+ doneName = done++;
+
+ return combinator.first ?
+ // Check against closest ancestor/preceding element
+ function( elem, context, xml ) {
+ while ( (elem = elem[ dir ]) ) {
+ if ( elem.nodeType === 1 || checkNonElements ) {
+ return matcher( elem, context, xml );
+ }
+ }
+ } :
+
+ // Check against all ancestor/preceding elements
+ function( elem, context, xml ) {
+ var data, cache, outerCache,
+ dirkey = dirruns + " " + doneName;
+
+ // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
+ if ( xml ) {
+ while ( (elem = elem[ dir ]) ) {
+ if ( elem.nodeType === 1 || checkNonElements ) {
+ if ( matcher( elem, context, xml ) ) {
+ return true;
+ }
+ }
+ }
+ } else {
+ while ( (elem = elem[ dir ]) ) {
+ if ( elem.nodeType === 1 || checkNonElements ) {
+ outerCache = elem[ expando ] || (elem[ expando ] = {});
+ if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {
+ if ( (data = cache[1]) === true || data === cachedruns ) {
+ return data === true;
+ }
+ } else {
+ cache = outerCache[ dir ] = [ dirkey ];
+ cache[1] = matcher( elem, context, xml ) || cachedruns;
+ if ( cache[1] === true ) {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ };
+}
+
+function elementMatcher( matchers ) {
+ return matchers.length > 1 ?
+ function( elem, context, xml ) {
+ var i = matchers.length;
+ while ( i-- ) {
+ if ( !matchers[i]( elem, context, xml ) ) {
+ return false;
+ }
+ }
+ return true;
+ } :
+ matchers[0];
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+ var elem,
+ newUnmatched = [],
+ i = 0,
+ len = unmatched.length,
+ mapped = map != null;
+
+ for ( ; i < len; i++ ) {
+ if ( (elem = unmatched[i]) ) {
+ if ( !filter || filter( elem, context, xml ) ) {
+ newUnmatched.push( elem );
+ if ( mapped ) {
+ map.push( i );
+ }
+ }
+ }
+ }
+
+ return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+ if ( postFilter && !postFilter[ expando ] ) {
+ postFilter = setMatcher( postFilter );
+ }
+ if ( postFinder && !postFinder[ expando ] ) {
+ postFinder = setMatcher( postFinder, postSelector );
+ }
+ return markFunction(function( seed, results, context, xml ) {
+ var temp, i, elem,
+ preMap = [],
+ postMap = [],
+ preexisting = results.length,
+
+ // Get initial elements from seed or context
+ elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+
+ // Prefilter to get matcher input, preserving a map for seed-results synchronization
+ matcherIn = preFilter && ( seed || !selector ) ?
+ condense( elems, preMap, preFilter, context, xml ) :
+ elems,
+
+ matcherOut = matcher ?
+ // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+ postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+ // ...intermediate processing is necessary
+ [] :
+
+ // ...otherwise use results directly
+ results :
+ matcherIn;
+
+ // Find primary matches
+ if ( matcher ) {
+ matcher( matcherIn, matcherOut, context, xml );
+ }
+
+ // Apply postFilter
+ if ( postFilter ) {
+ temp = condense( matcherOut, postMap );
+ postFilter( temp, [], context, xml );
+
+ // Un-match failing elements by moving them back to matcherIn
+ i = temp.length;
+ while ( i-- ) {
+ if ( (elem = temp[i]) ) {
+ matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+ }
+ }
+ }
+
+ if ( seed ) {
+ if ( postFinder || preFilter ) {
+ if ( postFinder ) {
+ // Get the final matcherOut by condensing this intermediate into postFinder contexts
+ temp = [];
+ i = matcherOut.length;
+ while ( i-- ) {
+ if ( (elem = matcherOut[i]) ) {
+ // Restore matcherIn since elem is not yet a final match
+ temp.push( (matcherIn[i] = elem) );
+ }
+ }
+ postFinder( null, (matcherOut = []), temp, xml );
+ }
+
+ // Move matched elements from seed to results to keep them synchronized
+ i = matcherOut.length;
+ while ( i-- ) {
+ if ( (elem = matcherOut[i]) &&
+ (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
+
+ seed[temp] = !(results[temp] = elem);
+ }
+ }
+ }
+
+ // Add elements to results, through postFinder if defined
+ } else {
+ matcherOut = condense(
+ matcherOut === results ?
+ matcherOut.splice( preexisting, matcherOut.length ) :
+ matcherOut
+ );
+ if ( postFinder ) {
+ postFinder( null, results, matcherOut, xml );
+ } else {
+ push.apply( results, matcherOut );
+ }
+ }
+ });
+}
+
+function matcherFromTokens( tokens ) {
+ var checkContext, matcher, j,
+ len = tokens.length,
+ leadingRelative = Expr.relative[ tokens[0].type ],
+ implicitRelative = leadingRelative || Expr.relative[" "],
+ i = leadingRelative ? 1 : 0,
+
+ // The foundational matcher ensures that elements are reachable from top-level context(s)
+ matchContext = addCombinator( function( elem ) {
+ return elem === checkContext;
+ }, implicitRelative, true ),
+ matchAnyContext = addCombinator( function( elem ) {
+ return indexOf.call( checkContext, elem ) > -1;
+ }, implicitRelative, true ),
+ matchers = [ function( elem, context, xml ) {
+ return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+ (checkContext = context).nodeType ?
+ matchContext( elem, context, xml ) :
+ matchAnyContext( elem, context, xml ) );
+ } ];
+
+ for ( ; i < len; i++ ) {
+ if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+ matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+ } else {
+ matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+ // Return special upon seeing a positional matcher
+ if ( matcher[ expando ] ) {
+ // Find the next relative operator (if any) for proper handling
+ j = ++i;
+ for ( ; j < len; j++ ) {
+ if ( Expr.relative[ tokens[j].type ] ) {
+ break;
+ }
+ }
+ return setMatcher(
+ i > 1 && elementMatcher( matchers ),
+ i > 1 && toSelector(
+ // If the preceding token was a descendant combinator, insert an implicit any-element `*`
+ tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
+ ).replace( rtrim, "$1" ),
+ matcher,
+ i < j && matcherFromTokens( tokens.slice( i, j ) ),
+ j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+ j < len && toSelector( tokens )
+ );
+ }
+ matchers.push( matcher );
+ }
+ }
+
+ return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+ // A counter to specify which element is currently being matched
+ var matcherCachedRuns = 0,
+ bySet = setMatchers.length > 0,
+ byElement = elementMatchers.length > 0,
+ superMatcher = function( seed, context, xml, results, expandContext ) {
+ var elem, j, matcher,
+ setMatched = [],
+ matchedCount = 0,
+ i = "0",
+ unmatched = seed && [],
+ outermost = expandContext != null,
+ contextBackup = outermostContext,
+ // We must always have either seed elements or context
+ elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),
+ // Use integer dirruns iff this is the outermost matcher
+ dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);
+
+ if ( outermost ) {
+ outermostContext = context !== document && context;
+ cachedruns = matcherCachedRuns;
+ }
+
+ // Add elements passing elementMatchers directly to results
+ // Keep `i` a string if there are no elements so `matchedCount` will be "00" below
+ for ( ; (elem = elems[i]) != null; i++ ) {
+ if ( byElement && elem ) {
+ j = 0;
+ while ( (matcher = elementMatchers[j++]) ) {
+ if ( matcher( elem, context, xml ) ) {
+ results.push( elem );
+ break;
+ }
+ }
+ if ( outermost ) {
+ dirruns = dirrunsUnique;
+ cachedruns = ++matcherCachedRuns;
+ }
+ }
+
+ // Track unmatched elements for set filters
+ if ( bySet ) {
+ // They will have gone through all possible matchers
+ if ( (elem = !matcher && elem) ) {
+ matchedCount--;
+ }
+
+ // Lengthen the array for every element, matched or not
+ if ( seed ) {
+ unmatched.push( elem );
+ }
+ }
+ }
+
+ // Apply set filters to unmatched elements
+ matchedCount += i;
+ if ( bySet && i !== matchedCount ) {
+ j = 0;
+ while ( (matcher = setMatchers[j++]) ) {
+ matcher( unmatched, setMatched, context, xml );
+ }
+
+ if ( seed ) {
+ // Reintegrate element matches to eliminate the need for sorting
+ if ( matchedCount > 0 ) {
+ while ( i-- ) {
+ if ( !(unmatched[i] || setMatched[i]) ) {
+ setMatched[i] = pop.call( results );
+ }
+ }
+ }
+
+ // Discard index placeholder values to get only actual matches
+ setMatched = condense( setMatched );
+ }
+
+ // Add matches to results
+ push.apply( results, setMatched );
+
+ // Seedless set matches succeeding multiple successful matchers stipulate sorting
+ if ( outermost && !seed && setMatched.length > 0 &&
+ ( matchedCount + setMatchers.length ) > 1 ) {
+
+ Sizzle.uniqueSort( results );
+ }
+ }
+
+ // Override manipulation of globals by nested matchers
+ if ( outermost ) {
+ dirruns = dirrunsUnique;
+ outermostContext = contextBackup;
+ }
+
+ return unmatched;
+ };
+
+ return bySet ?
+ markFunction( superMatcher ) :
+ superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
+ var i,
+ setMatchers = [],
+ elementMatchers = [],
+ cached = compilerCache[ selector + " " ];
+
+ if ( !cached ) {
+ // Generate a function of recursive functions that can be used to check each element
+ if ( !group ) {
+ group = tokenize( selector );
+ }
+ i = group.length;
+ while ( i-- ) {
+ cached = matcherFromTokens( group[i] );
+ if ( cached[ expando ] ) {
+ setMatchers.push( cached );
+ } else {
+ elementMatchers.push( cached );
+ }
+ }
+
+ // Cache the compiled function
+ cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+ }
+ return cached;
+};
+
+function multipleContexts( selector, contexts, results ) {
+ var i = 0,
+ len = contexts.length;
+ for ( ; i < len; i++ ) {
+ Sizzle( selector, contexts[i], results );
+ }
+ return results;
+}
+
+function select( selector, context, results, seed ) {
+ var i, tokens, token, type, find,
+ match = tokenize( selector );
+
+ if ( !seed ) {
+ // Try to minimize operations if there is only one group
+ if ( match.length === 1 ) {
+
+ // Take a shortcut and set the context if the root selector is an ID
+ tokens = match[0] = match[0].slice( 0 );
+ if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+ support.getById && context.nodeType === 9 && documentIsHTML &&
+ Expr.relative[ tokens[1].type ] ) {
+
+ context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
+ if ( !context ) {
+ return results;
+ }
+ selector = selector.slice( tokens.shift().value.length );
+ }
+
+ // Fetch a seed set for right-to-left matching
+ i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+ while ( i-- ) {
+ token = tokens[i];
+
+ // Abort if we hit a combinator
+ if ( Expr.relative[ (type = token.type) ] ) {
+ break;
+ }
+ if ( (find = Expr.find[ type ]) ) {
+ // Search, expanding context for leading sibling combinators
+ if ( (seed = find(
+ token.matches[0].replace( runescape, funescape ),
+ rsibling.test( tokens[0].type ) && context.parentNode || context
+ )) ) {
+
+ // If seed is empty or no tokens remain, we can return early
+ tokens.splice( i, 1 );
+ selector = seed.length && toSelector( tokens );
+ if ( !selector ) {
+ push.apply( results, seed );
+ return results;
+ }
+
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ // Compile and execute a filtering function
+ // Provide `match` to avoid retokenization if we modified the selector above
+ compile( selector, match )(
+ seed,
+ context,
+ !documentIsHTML,
+ results,
+ rsibling.test( selector )
+ );
+ return results;
+}
+
+// One-time assignments
+
+// Sort stability
+support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
+
+// Support: Chrome<14
+// Always assume duplicates if they aren't passed to the comparison function
+support.detectDuplicates = hasDuplicate;
+
+// Initialize against the default document
+setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+support.sortDetached = assert(function( div1 ) {
+ // Should return 1, but returns 4 (following)
+ return div1.compareDocumentPosition( document.createElement("div") ) & 1;
+});
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert(function( div ) {
+ div.innerHTML = "<a href='#'></a>";
+ return div.firstChild.getAttribute("href") === "#" ;
+}) ) {
+ addHandle( "type|href|height|width", function( elem, name, isXML ) {
+ if ( !isXML ) {
+ return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
+ }
+ });
+}
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+if ( !support.attributes || !assert(function( div ) {
+ div.innerHTML = "<input/>";
+ div.firstChild.setAttribute( "value", "" );
+ return div.firstChild.getAttribute( "value" ) === "";
+}) ) {
+ addHandle( "value", function( elem, name, isXML ) {
+ if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
+ return elem.defaultValue;
+ }
+ });
+}
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+if ( !assert(function( div ) {
+ return div.getAttribute("disabled") == null;
+}) ) {
+ addHandle( booleans, function( elem, name, isXML ) {
+ var val;
+ if ( !isXML ) {
+ return (val = elem.getAttributeNode( name )) && val.specified ?
+ val.value :
+ elem[ name ] === true ? name.toLowerCase() : null;
+ }
+ });
+}
+
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.pseudos;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+})( window );
+// String to Object options format cache
+var optionsCache = {};
+
+// Convert String-formatted options into Object-formatted ones and store in cache
+function createOptions( options ) {
+ var object = optionsCache[ options ] = {};
+ jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {
+ object[ flag ] = true;
+ });
+ return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ * options: an optional list of space-separated options that will change how
+ * the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ * once: will ensure the callback list can only be fired once (like a Deferred)
+ *
+ * memory: will keep track of previous values and will call any callback added
+ * after the list has been fired right away with the latest "memorized"
+ * values (like a Deferred)
+ *
+ * unique: will ensure a callback can only be added once (no duplicate in the list)
+ *
+ * stopOnFalse: interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+ // Convert options from String-formatted to Object-formatted if needed
+ // (we check in cache first)
+ options = typeof options === "string" ?
+ ( optionsCache[ options ] || createOptions( options ) ) :
+ jQuery.extend( {}, options );
+
+ var // Last fire value (for non-forgettable lists)
+ memory,
+ // Flag to know if list was already fired
+ fired,
+ // Flag to know if list is currently firing
+ firing,
+ // First callback to fire (used internally by add and fireWith)
+ firingStart,
+ // End of the loop when firing
+ firingLength,
+ // Index of currently firing callback (modified by remove if needed)
+ firingIndex,
+ // Actual callback list
+ list = [],
+ // Stack of fire calls for repeatable lists
+ stack = !options.once && [],
+ // Fire callbacks
+ fire = function( data ) {
+ memory = options.memory && data;
+ fired = true;
+ firingIndex = firingStart || 0;
+ firingStart = 0;
+ firingLength = list.length;
+ firing = true;
+ for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+ if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
+ memory = false; // To prevent further calls using add
+ break;
+ }
+ }
+ firing = false;
+ if ( list ) {
+ if ( stack ) {
+ if ( stack.length ) {
+ fire( stack.shift() );
+ }
+ } else if ( memory ) {
+ list = [];
+ } else {
+ self.disable();
+ }
+ }
+ },
+ // Actual Callbacks object
+ self = {
+ // Add a callback or a collection of callbacks to the list
+ add: function() {
+ if ( list ) {
+ // First, we save the current length
+ var start = list.length;
+ (function add( args ) {
+ jQuery.each( args, function( _, arg ) {
+ var type = jQuery.type( arg );
+ if ( type === "function" ) {
+ if ( !options.unique || !self.has( arg ) ) {
+ list.push( arg );
+ }
+ } else if ( arg && arg.length && type !== "string" ) {
+ // Inspect recursively
+ add( arg );
+ }
+ });
+ })( arguments );
+ // Do we need to add the callbacks to the
+ // current firing batch?
+ if ( firing ) {
+ firingLength = list.length;
+ // With memory, if we're not firing then
+ // we should call right away
+ } else if ( memory ) {
+ firingStart = start;
+ fire( memory );
+ }
+ }
+ return this;
+ },
+ // Remove a callback from the list
+ remove: function() {
+ if ( list ) {
+ jQuery.each( arguments, function( _, arg ) {
+ var index;
+ while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+ list.splice( index, 1 );
+ // Handle firing indexes
+ if ( firing ) {
+ if ( index <= firingLength ) {
+ firingLength--;
+ }
+ if ( index <= firingIndex ) {
+ firingIndex--;
+ }
+ }
+ }
+ });
+ }
+ return this;
+ },
+ // Check if a given callback is in the list.
+ // If no argument is given, return whether or not list has callbacks attached.
+ has: function( fn ) {
+ return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
+ },
+ // Remove all callbacks from the list
+ empty: function() {
+ list = [];
+ firingLength = 0;
+ return this;
+ },
+ // Have the list do nothing anymore
+ disable: function() {
+ list = stack = memory = undefined;
+ return this;
+ },
+ // Is it disabled?
+ disabled: function() {
+ return !list;
+ },
+ // Lock the list in its current state
+ lock: function() {
+ stack = undefined;
+ if ( !memory ) {
+ self.disable();
+ }
+ return this;
+ },
+ // Is it locked?
+ locked: function() {
+ return !stack;
+ },
+ // Call all callbacks with the given context and arguments
+ fireWith: function( context, args ) {
+ if ( list && ( !fired || stack ) ) {
+ args = args || [];
+ args = [ context, args.slice ? args.slice() : args ];
+ if ( firing ) {
+ stack.push( args );
+ } else {
+ fire( args );
+ }
+ }
+ return this;
+ },
+ // Call all the callbacks with the given arguments
+ fire: function() {
+ self.fireWith( this, arguments );
+ return this;
+ },
+ // To know if the callbacks have already been called at least once
+ fired: function() {
+ return !!fired;
+ }
+ };
+
+ return self;
+};
+jQuery.extend({
+
+ Deferred: function( func ) {
+ var tuples = [
+ // action, add listener, listener list, final state
+ [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
+ [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
+ [ "notify", "progress", jQuery.Callbacks("memory") ]
+ ],
+ state = "pending",
+ promise = {
+ state: function() {
+ return state;
+ },
+ always: function() {
+ deferred.done( arguments ).fail( arguments );
+ return this;
+ },
+ then: function( /* fnDone, fnFail, fnProgress */ ) {
+ var fns = arguments;
+ return jQuery.Deferred(function( newDefer ) {
+ jQuery.each( tuples, function( i, tuple ) {
+ var action = tuple[ 0 ],
+ fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
+ // deferred[ done | fail | progress ] for forwarding actions to newDefer
+ deferred[ tuple[1] ](function() {
+ var returned = fn && fn.apply( this, arguments );
+ if ( returned && jQuery.isFunction( returned.promise ) ) {
+ returned.promise()
+ .done( newDefer.resolve )
+ .fail( newDefer.reject )
+ .progress( newDefer.notify );
+ } else {
+ newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
+ }
+ });
+ });
+ fns = null;
+ }).promise();
+ },
+ // Get a promise for this deferred
+ // If obj is provided, the promise aspect is added to the object
+ promise: function( obj ) {
+ return obj != null ? jQuery.extend( obj, promise ) : promise;
+ }
+ },
+ deferred = {};
+
+ // Keep pipe for back-compat
+ promise.pipe = promise.then;
+
+ // Add list-specific methods
+ jQuery.each( tuples, function( i, tuple ) {
+ var list = tuple[ 2 ],
+ stateString = tuple[ 3 ];
+
+ // promise[ done | fail | progress ] = list.add
+ promise[ tuple[1] ] = list.add;
+
+ // Handle state
+ if ( stateString ) {
+ list.add(function() {
+ // state = [ resolved | rejected ]
+ state = stateString;
+
+ // [ reject_list | resolve_list ].disable; progress_list.lock
+ }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
+ }
+
+ // deferred[ resolve | reject | notify ]
+ deferred[ tuple[0] ] = function() {
+ deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
+ return this;
+ };
+ deferred[ tuple[0] + "With" ] = list.fireWith;
+ });
+
+ // Make the deferred a promise
+ promise.promise( deferred );
+
+ // Call given func if any
+ if ( func ) {
+ func.call( deferred, deferred );
+ }
+
+ // All done!
+ return deferred;
+ },
+
+ // Deferred helper
+ when: function( subordinate /* , ..., subordinateN */ ) {
+ var i = 0,
+ resolveValues = core_slice.call( arguments ),
+ length = resolveValues.length,
+
+ // the count of uncompleted subordinates
+ remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
+
+ // the master Deferred. If resolveValues consist of only a single Deferred, just use that.
+ deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
+
+ // Update function for both resolve and progress values
+ updateFunc = function( i, contexts, values ) {
+ return function( value ) {
+ contexts[ i ] = this;
+ values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;
+ if( values === progressValues ) {
+ deferred.notifyWith( contexts, values );
+ } else if ( !( --remaining ) ) {
+ deferred.resolveWith( contexts, values );
+ }
+ };
+ },
+
+ progressValues, progressContexts, resolveContexts;
+
+ // add listeners to Deferred subordinates; treat others as resolved
+ if ( length > 1 ) {
+ progressValues = new Array( length );
+ progressContexts = new Array( length );
+ resolveContexts = new Array( length );
+ for ( ; i < length; i++ ) {
+ if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
+ resolveValues[ i ].promise()
+ .done( updateFunc( i, resolveContexts, resolveValues ) )
+ .fail( deferred.reject )
+ .progress( updateFunc( i, progressContexts, progressValues ) );
+ } else {
+ --remaining;
+ }
+ }
+ }
+
+ // if we're not waiting on anything, resolve the master
+ if ( !remaining ) {
+ deferred.resolveWith( resolveContexts, resolveValues );
+ }
+
+ return deferred.promise();
+ }
+});
+jQuery.support = (function( support ) {
+ var input = document.createElement("input"),
+ fragment = document.createDocumentFragment(),
+ div = document.createElement("div"),
+ select = document.createElement("select"),
+ opt = select.appendChild( document.createElement("option") );
+
+ // Finish early in limited environments
+ if ( !input.type ) {
+ return support;
+ }
+
+ input.type = "checkbox";
+
+ // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3
+ // Check the default checkbox/radio value ("" on old WebKit; "on" elsewhere)
+ support.checkOn = input.value !== "";
+
+ // Must access the parent to make an option select properly
+ // Support: IE9, IE10
+ support.optSelected = opt.selected;
+
+ // Will be defined later
+ support.reliableMarginRight = true;
+ support.boxSizingReliable = true;
+ support.pixelPosition = false;
+
+ // Make sure checked status is properly cloned
+ // Support: IE9, IE10
+ input.checked = true;
+ support.noCloneChecked = input.cloneNode( true ).checked;
+
+ // Make sure that the options inside disabled selects aren't marked as disabled
+ // (WebKit marks them as disabled)
+ select.disabled = true;
+ support.optDisabled = !opt.disabled;
+
+ // Check if an input maintains its value after becoming a radio
+ // Support: IE9, IE10
+ input = document.createElement("input");
+ input.value = "t";
+ input.type = "radio";
+ support.radioValue = input.value === "t";
+
+ // #11217 - WebKit loses check when the name is after the checked attribute
+ input.setAttribute( "checked", "t" );
+ input.setAttribute( "name", "t" );
+
+ fragment.appendChild( input );
+
+ // Support: Safari 5.1, Android 4.x, Android 2.3
+ // old WebKit doesn't clone checked state correctly in fragments
+ support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+ // Support: Firefox, Chrome, Safari
+ // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)
+ support.focusinBubbles = "onfocusin" in window;
+
+ div.style.backgroundClip = "content-box";
+ div.cloneNode( true ).style.backgroundClip = "";
+ support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+ // Run tests that need a body at doc ready
+ jQuery(function() {
+ var container, marginDiv,
+ // Support: Firefox, Android 2.3 (Prefixed box-sizing versions).
+ divReset = "padding:0;margin:0;border:0;display:block;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box",
+ body = document.getElementsByTagName("body")[ 0 ];
+
+ if ( !body ) {
+ // Return for frameset docs that don't have a body
+ return;
+ }
+
+ container = document.createElement("div");
+ container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px";
+
+ // Check box-sizing and margin behavior.
+ body.appendChild( container ).appendChild( div );
+ div.innerHTML = "";
+ // Support: Firefox, Android 2.3 (Prefixed box-sizing versions).
+ div.style.cssText = "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%";
+
+ // Workaround failing boxSizing test due to offsetWidth returning wrong value
+ // with some non-1 values of body zoom, ticket #13543
+ jQuery.swap( body, body.style.zoom != null ? { zoom: 1 } : {}, function() {
+ support.boxSizing = div.offsetWidth === 4;
+ });
+
+ // Use window.getComputedStyle because jsdom on node.js will break without it.
+ if ( window.getComputedStyle ) {
+ support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
+ support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
+
+ // Support: Android 2.3
+ // Check if div with explicit width and no margin-right incorrectly
+ // gets computed margin-right based on width of container. (#3333)
+ // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+ marginDiv = div.appendChild( document.createElement("div") );
+ marginDiv.style.cssText = div.style.cssText = divReset;
+ marginDiv.style.marginRight = marginDiv.style.width = "0";
+ div.style.width = "1px";
+
+ support.reliableMarginRight =
+ !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );
+ }
+
+ body.removeChild( container );
+ });
+
+ return support;
+})( {} );
+
+/*
+ Implementation Summary
+
+ 1. Enforce API surface and semantic compatibility with 1.9.x branch
+ 2. Improve the module's maintainability by reducing the storage
+ paths to a single mechanism.
+ 3. Use the same single mechanism to support "private" and "user" data.
+ 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
+ 5. Avoid exposing implementation details on user objects (eg. expando properties)
+ 6. Provide a clear path for implementation upgrade to WeakMap in 2014
+*/
+var data_user, data_priv,
+ rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
+ rmultiDash = /([A-Z])/g;
+
+function Data() {
+ // Support: Android < 4,
+ // Old WebKit does not have Object.preventExtensions/freeze method,
+ // return new empty object instead with no [[set]] accessor
+ Object.defineProperty( this.cache = {}, 0, {
+ get: function() {
+ return {};
+ }
+ });
+
+ this.expando = jQuery.expando + Math.random();
+}
+
+Data.uid = 1;
+
+Data.accepts = function( owner ) {
+ // Accepts only:
+ // - Node
+ // - Node.ELEMENT_NODE
+ // - Node.DOCUMENT_NODE
+ // - Object
+ // - Any
+ return owner.nodeType ?
+ owner.nodeType === 1 || owner.nodeType === 9 : true;
+};
+
+Data.prototype = {
+ key: function( owner ) {
+ // We can accept data for non-element nodes in modern browsers,
+ // but we should not, see #8335.
+ // Always return the key for a frozen object.
+ if ( !Data.accepts( owner ) ) {
+ return 0;
+ }
+
+ var descriptor = {},
+ // Check if the owner object already has a cache key
+ unlock = owner[ this.expando ];
+
+ // If not, create one
+ if ( !unlock ) {
+ unlock = Data.uid++;
+
+ // Secure it in a non-enumerable, non-writable property
+ try {
+ descriptor[ this.expando ] = { value: unlock };
+ Object.defineProperties( owner, descriptor );
+
+ // Support: Android < 4
+ // Fallback to a less secure definition
+ } catch ( e ) {
+ descriptor[ this.expando ] = unlock;
+ jQuery.extend( owner, descriptor );
+ }
+ }
+
+ // Ensure the cache object
+ if ( !this.cache[ unlock ] ) {
+ this.cache[ unlock ] = {};
+ }
+
+ return unlock;
+ },
+ set: function( owner, data, value ) {
+ var prop,
+ // There may be an unlock assigned to this node,
+ // if there is no entry for this "owner", create one inline
+ // and set the unlock as though an owner entry had always existed
+ unlock = this.key( owner ),
+ cache = this.cache[ unlock ];
+
+ // Handle: [ owner, key, value ] args
+ if ( typeof data === "string" ) {
+ cache[ data ] = value;
+
+ // Handle: [ owner, { properties } ] args
+ } else {
+ // Fresh assignments by object are shallow copied
+ if ( jQuery.isEmptyObject( cache ) ) {
+ jQuery.extend( this.cache[ unlock ], data );
+ // Otherwise, copy the properties one-by-one to the cache object
+ } else {
+ for ( prop in data ) {
+ cache[ prop ] = data[ prop ];
+ }
+ }
+ }
+ return cache;
+ },
+ get: function( owner, key ) {
+ // Either a valid cache is found, or will be created.
+ // New caches will be created and the unlock returned,
+ // allowing direct access to the newly created
+ // empty data object. A valid owner object must be provided.
+ var cache = this.cache[ this.key( owner ) ];
+
+ return key === undefined ?
+ cache : cache[ key ];
+ },
+ access: function( owner, key, value ) {
+ var stored;
+ // In cases where either:
+ //
+ // 1. No key was specified
+ // 2. A string key was specified, but no value provided
+ //
+ // Take the "read" path and allow the get method to determine
+ // which value to return, respectively either:
+ //
+ // 1. The entire cache object
+ // 2. The data stored at the key
+ //
+ if ( key === undefined ||
+ ((key && typeof key === "string") && value === undefined) ) {
+
+ stored = this.get( owner, key );
+
+ return stored !== undefined ?
+ stored : this.get( owner, jQuery.camelCase(key) );
+ }
+
+ // [*]When the key is not a string, or both a key and value
+ // are specified, set or extend (existing objects) with either:
+ //
+ // 1. An object of properties
+ // 2. A key and value
+ //
+ this.set( owner, key, value );
+
+ // Since the "set" path can have two possible entry points
+ // return the expected data based on which path was taken[*]
+ return value !== undefined ? value : key;
+ },
+ remove: function( owner, key ) {
+ var i, name, camel,
+ unlock = this.key( owner ),
+ cache = this.cache[ unlock ];
+
+ if ( key === undefined ) {
+ this.cache[ unlock ] = {};
+
+ } else {
+ // Support array or space separated string of keys
+ if ( jQuery.isArray( key ) ) {
+ // If "name" is an array of keys...
+ // When data is initially created, via ("key", "val") signature,
+ // keys will be converted to camelCase.
+ // Since there is no way to tell _how_ a key was added, remove
+ // both plain key and camelCase key. #12786
+ // This will only penalize the array argument path.
+ name = key.concat( key.map( jQuery.camelCase ) );
+ } else {
+ camel = jQuery.camelCase( key );
+ // Try the string as a key before any manipulation
+ if ( key in cache ) {
+ name = [ key, camel ];
+ } else {
+ // If a key with the spaces exists, use it.
+ // Otherwise, create an array by matching non-whitespace
+ name = camel;
+ name = name in cache ?
+ [ name ] : ( name.match( core_rnotwhite ) || [] );
+ }
+ }
+
+ i = name.length;
+ while ( i-- ) {
+ delete cache[ name[ i ] ];
+ }
+ }
+ },
+ hasData: function( owner ) {
+ return !jQuery.isEmptyObject(
+ this.cache[ owner[ this.expando ] ] || {}
+ );
+ },
+ discard: function( owner ) {
+ if ( owner[ this.expando ] ) {
+ delete this.cache[ owner[ this.expando ] ];
+ }
+ }
+};
+
+// These may be used throughout the jQuery core codebase
+data_user = new Data();
+data_priv = new Data();
+
+
+jQuery.extend({
+ acceptData: Data.accepts,
+
+ hasData: function( elem ) {
+ return data_user.hasData( elem ) || data_priv.hasData( elem );
+ },
+
+ data: function( elem, name, data ) {
+ return data_user.access( elem, name, data );
+ },
+
+ removeData: function( elem, name ) {
+ data_user.remove( elem, name );
+ },
+
+ // TODO: Now that all calls to _data and _removeData have been replaced
+ // with direct calls to data_priv methods, these can be deprecated.
+ _data: function( elem, name, data ) {
+ return data_priv.access( elem, name, data );
+ },
+
+ _removeData: function( elem, name ) {
+ data_priv.remove( elem, name );
+ }
+});
+
+jQuery.fn.extend({
+ data: function( key, value ) {
+ var attrs, name,
+ elem = this[ 0 ],
+ i = 0,
+ data = null;
+
+ // Gets all values
+ if ( key === undefined ) {
+ if ( this.length ) {
+ data = data_user.get( elem );
+
+ if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) {
+ attrs = elem.attributes;
+ for ( ; i < attrs.length; i++ ) {
+ name = attrs[ i ].name;
+
+ if ( name.indexOf( "data-" ) === 0 ) {
+ name = jQuery.camelCase( name.slice(5) );
+ dataAttr( elem, name, data[ name ] );
+ }
+ }
+ data_priv.set( elem, "hasDataAttrs", true );
+ }
+ }
+
+ return data;
+ }
+
+ // Sets multiple values
+ if ( typeof key === "object" ) {
+ return this.each(function() {
+ data_user.set( this, key );
+ });
+ }
+
+ return jQuery.access( this, function( value ) {
+ var data,
+ camelKey = jQuery.camelCase( key );
+
+ // The calling jQuery object (element matches) is not empty
+ // (and therefore has an element appears at this[ 0 ]) and the
+ // `value` parameter was not undefined. An empty jQuery object
+ // will result in `undefined` for elem = this[ 0 ] which will
+ // throw an exception if an attempt to read a data cache is made.
+ if ( elem && value === undefined ) {
+ // Attempt to get data from the cache
+ // with the key as-is
+ data = data_user.get( elem, key );
+ if ( data !== undefined ) {
+ return data;
+ }
+
+ // Attempt to get data from the cache
+ // with the key camelized
+ data = data_user.get( elem, camelKey );
+ if ( data !== undefined ) {
+ return data;
+ }
+
+ // Attempt to "discover" the data in
+ // HTML5 custom data-* attrs
+ data = dataAttr( elem, camelKey, undefined );
+ if ( data !== undefined ) {
+ return data;
+ }
+
+ // We tried really hard, but the data doesn't exist.
+ return;
+ }
+
+ // Set the data...
+ this.each(function() {
+ // First, attempt to store a copy or reference of any
+ // data that might've been store with a camelCased key.
+ var data = data_user.get( this, camelKey );
+
+ // For HTML5 data-* attribute interop, we have to
+ // store property names with dashes in a camelCase form.
+ // This might not apply to all properties...*
+ data_user.set( this, camelKey, value );
+
+ // *... In the case of properties that might _actually_
+ // have dashes, we need to also store a copy of that
+ // unchanged property.
+ if ( key.indexOf("-") !== -1 && data !== undefined ) {
+ data_user.set( this, key, value );
+ }
+ });
+ }, null, value, arguments.length > 1, null, true );
+ },
+
+ removeData: function( key ) {
+ return this.each(function() {
+ data_user.remove( this, key );
+ });
+ }
+});
+
+function dataAttr( elem, key, data ) {
+ var name;
+
+ // If nothing was found internally, try to fetch any
+ // data from the HTML5 data-* attribute
+ if ( data === undefined && elem.nodeType === 1 ) {
+ name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+ data = elem.getAttribute( name );
+
+ if ( typeof data === "string" ) {
+ try {
+ data = data === "true" ? true :
+ data === "false" ? false :
+ data === "null" ? null :
+ // Only convert to a number if it doesn't change the string
+ +data + "" === data ? +data :
+ rbrace.test( data ) ? JSON.parse( data ) :
+ data;
+ } catch( e ) {}
+
+ // Make sure we set the data so it isn't changed later
+ data_user.set( elem, key, data );
+ } else {
+ data = undefined;
+ }
+ }
+ return data;
+}
+jQuery.extend({
+ queue: function( elem, type, data ) {
+ var queue;
+
+ if ( elem ) {
+ type = ( type || "fx" ) + "queue";
+ queue = data_priv.get( elem, type );
+
+ // Speed up dequeue by getting out quickly if this is just a lookup
+ if ( data ) {
+ if ( !queue || jQuery.isArray( data ) ) {
+ queue = data_priv.access( elem, type, jQuery.makeArray(data) );
+ } else {
+ queue.push( data );
+ }
+ }
+ return queue || [];
+ }
+ },
+
+ dequeue: function( elem, type ) {
+ type = type || "fx";
+
+ var queue = jQuery.queue( elem, type ),
+ startLength = queue.length,
+ fn = queue.shift(),
+ hooks = jQuery._queueHooks( elem, type ),
+ next = function() {
+ jQuery.dequeue( elem, type );
+ };
+
+ // If the fx queue is dequeued, always remove the progress sentinel
+ if ( fn === "inprogress" ) {
+ fn = queue.shift();
+ startLength--;
+ }
+
+ if ( fn ) {
+
+ // Add a progress sentinel to prevent the fx queue from being
+ // automatically dequeued
+ if ( type === "fx" ) {
+ queue.unshift( "inprogress" );
+ }
+
+ // clear up the last queue stop function
+ delete hooks.stop;
+ fn.call( elem, next, hooks );
+ }
+
+ if ( !startLength && hooks ) {
+ hooks.empty.fire();
+ }
+ },
+
+ // not intended for public consumption - generates a queueHooks object, or returns the current one
+ _queueHooks: function( elem, type ) {
+ var key = type + "queueHooks";
+ return data_priv.get( elem, key ) || data_priv.access( elem, key, {
+ empty: jQuery.Callbacks("once memory").add(function() {
+ data_priv.remove( elem, [ type + "queue", key ] );
+ })
+ });
+ }
+});
+
+jQuery.fn.extend({
+ queue: function( type, data ) {
+ var setter = 2;
+
+ if ( typeof type !== "string" ) {
+ data = type;
+ type = "fx";
+ setter--;
+ }
+
+ if ( arguments.length < setter ) {
+ return jQuery.queue( this[0], type );
+ }
+
+ return data === undefined ?
+ this :
+ this.each(function() {
+ var queue = jQuery.queue( this, type, data );
+
+ // ensure a hooks for this queue
+ jQuery._queueHooks( this, type );
+
+ if ( type === "fx" && queue[0] !== "inprogress" ) {
+ jQuery.dequeue( this, type );
+ }
+ });
+ },
+ dequeue: function( type ) {
+ return this.each(function() {
+ jQuery.dequeue( this, type );
+ });
+ },
+ // Based off of the plugin by Clint Helfers, with permission.
+ // http://blindsignals.com/index.php/2009/07/jquery-delay/
+ delay: function( time, type ) {
+ time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+ type = type || "fx";
+
+ return this.queue( type, function( next, hooks ) {
+ var timeout = setTimeout( next, time );
+ hooks.stop = function() {
+ clearTimeout( timeout );
+ };
+ });
+ },
+ clearQueue: function( type ) {
+ return this.queue( type || "fx", [] );
+ },
+ // Get a promise resolved when queues of a certain type
+ // are emptied (fx is the type by default)
+ promise: function( type, obj ) {
+ var tmp,
+ count = 1,
+ defer = jQuery.Deferred(),
+ elements = this,
+ i = this.length,
+ resolve = function() {
+ if ( !( --count ) ) {
+ defer.resolveWith( elements, [ elements ] );
+ }
+ };
+
+ if ( typeof type !== "string" ) {
+ obj = type;
+ type = undefined;
+ }
+ type = type || "fx";
+
+ while( i-- ) {
+ tmp = data_priv.get( elements[ i ], type + "queueHooks" );
+ if ( tmp && tmp.empty ) {
+ count++;
+ tmp.empty.add( resolve );
+ }
+ }
+ resolve();
+ return defer.promise( obj );
+ }
+});
+var nodeHook, boolHook,
+ rclass = /[\t\r\n\f]/g,
+ rreturn = /\r/g,
+ rfocusable = /^(?:input|select|textarea|button)$/i;
+
+jQuery.fn.extend({
+ attr: function( name, value ) {
+ return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
+ },
+
+ removeAttr: function( name ) {
+ return this.each(function() {
+ jQuery.removeAttr( this, name );
+ });
+ },
+
+ prop: function( name, value ) {
+ return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
+ },
+
+ removeProp: function( name ) {
+ return this.each(function() {
+ delete this[ jQuery.propFix[ name ] || name ];
+ });
+ },
+
+ addClass: function( value ) {
+ var classes, elem, cur, clazz, j,
+ i = 0,
+ len = this.length,
+ proceed = typeof value === "string" && value;
+
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function( j ) {
+ jQuery( this ).addClass( value.call( this, j, this.className ) );
+ });
+ }
+
+ if ( proceed ) {
+ // The disjunction here is for better compressibility (see removeClass)
+ classes = ( value || "" ).match( core_rnotwhite ) || [];
+
+ for ( ; i < len; i++ ) {
+ elem = this[ i ];
+ cur = elem.nodeType === 1 && ( elem.className ?
+ ( " " + elem.className + " " ).replace( rclass, " " ) :
+ " "
+ );
+
+ if ( cur ) {
+ j = 0;
+ while ( (clazz = classes[j++]) ) {
+ if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+ cur += clazz + " ";
+ }
+ }
+ elem.className = jQuery.trim( cur );
+
+ }
+ }
+ }
+
+ return this;
+ },
+
+ removeClass: function( value ) {
+ var classes, elem, cur, clazz, j,
+ i = 0,
+ len = this.length,
+ proceed = arguments.length === 0 || typeof value === "string" && value;
+
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function( j ) {
+ jQuery( this ).removeClass( value.call( this, j, this.className ) );
+ });
+ }
+ if ( proceed ) {
+ classes = ( value || "" ).match( core_rnotwhite ) || [];
+
+ for ( ; i < len; i++ ) {
+ elem = this[ i ];
+ // This expression is here for better compressibility (see addClass)
+ cur = elem.nodeType === 1 && ( elem.className ?
+ ( " " + elem.className + " " ).replace( rclass, " " ) :
+ ""
+ );
+
+ if ( cur ) {
+ j = 0;
+ while ( (clazz = classes[j++]) ) {
+ // Remove *all* instances
+ while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
+ cur = cur.replace( " " + clazz + " ", " " );
+ }
+ }
+ elem.className = value ? jQuery.trim( cur ) : "";
+ }
+ }
+ }
+
+ return this;
+ },
+
+ toggleClass: function( value, stateVal ) {
+ var type = typeof value;
+
+ if ( typeof stateVal === "boolean" && type === "string" ) {
+ return stateVal ? this.addClass( value ) : this.removeClass( value );
+ }
+
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function( i ) {
+ jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
+ });
+ }
+
+ return this.each(function() {
+ if ( type === "string" ) {
+ // toggle individual class names
+ var className,
+ i = 0,
+ self = jQuery( this ),
+ classNames = value.match( core_rnotwhite ) || [];
+
+ while ( (className = classNames[ i++ ]) ) {
+ // check each className given, space separated list
+ if ( self.hasClass( className ) ) {
+ self.removeClass( className );
+ } else {
+ self.addClass( className );
+ }
+ }
+
+ // Toggle whole class name
+ } else if ( type === core_strundefined || type === "boolean" ) {
+ if ( this.className ) {
+ // store className if set
+ data_priv.set( this, "__className__", this.className );
+ }
+
+ // If the element has a class name or if we're passed "false",
+ // then remove the whole classname (if there was one, the above saved it).
+ // Otherwise bring back whatever was previously saved (if anything),
+ // falling back to the empty string if nothing was stored.
+ this.className = this.className || value === false ? "" : data_priv.get( this, "__className__" ) || "";
+ }
+ });
+ },
+
+ hasClass: function( selector ) {
+ var className = " " + selector + " ",
+ i = 0,
+ l = this.length;
+ for ( ; i < l; i++ ) {
+ if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
+ return true;
+ }
+ }
+
+ return false;
+ },
+
+ val: function( value ) {
+ var hooks, ret, isFunction,
+ elem = this[0];
+
+ if ( !arguments.length ) {
+ if ( elem ) {
+ hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+ return ret;
+ }
+
+ ret = elem.value;
+
+ return typeof ret === "string" ?
+ // handle most common string cases
+ ret.replace(rreturn, "") :
+ // handle cases where value is null/undef or number
+ ret == null ? "" : ret;
+ }
+
+ return;
+ }
+
+ isFunction = jQuery.isFunction( value );
+
+ return this.each(function( i ) {
+ var val;
+
+ if ( this.nodeType !== 1 ) {
+ return;
+ }
+
+ if ( isFunction ) {
+ val = value.call( this, i, jQuery( this ).val() );
+ } else {
+ val = value;
+ }
+
+ // Treat null/undefined as ""; convert numbers to string
+ if ( val == null ) {
+ val = "";
+ } else if ( typeof val === "number" ) {
+ val += "";
+ } else if ( jQuery.isArray( val ) ) {
+ val = jQuery.map(val, function ( value ) {
+ return value == null ? "" : value + "";
+ });
+ }
+
+ hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+ // If set returns undefined, fall back to normal setting
+ if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+ this.value = val;
+ }
+ });
+ }
+});
+
+jQuery.extend({
+ valHooks: {
+ option: {
+ get: function( elem ) {
+ // attributes.value is undefined in Blackberry 4.7 but
+ // uses .value. See #6932
+ var val = elem.attributes.value;
+ return !val || val.specified ? elem.value : elem.text;
+ }
+ },
+ select: {
+ get: function( elem ) {
+ var value, option,
+ options = elem.options,
+ index = elem.selectedIndex,
+ one = elem.type === "select-one" || index < 0,
+ values = one ? null : [],
+ max = one ? index + 1 : options.length,
+ i = index < 0 ?
+ max :
+ one ? index : 0;
+
+ // Loop through all the selected options
+ for ( ; i < max; i++ ) {
+ option = options[ i ];
+
+ // IE6-9 doesn't update selected after form reset (#2551)
+ if ( ( option.selected || i === index ) &&
+ // Don't return options that are disabled or in a disabled optgroup
+ ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
+ ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
+
+ // Get the specific value for the option
+ value = jQuery( option ).val();
+
+ // We don't need an array for one selects
+ if ( one ) {
+ return value;
+ }
+
+ // Multi-Selects return an array
+ values.push( value );
+ }
+ }
+
+ return values;
+ },
+
+ set: function( elem, value ) {
+ var optionSet, option,
+ options = elem.options,
+ values = jQuery.makeArray( value ),
+ i = options.length;
+
+ while ( i-- ) {
+ option = options[ i ];
+ if ( (option.selected = jQuery.inArray( jQuery(option).val(), values ) >= 0) ) {
+ optionSet = true;
+ }
+ }
+
+ // force browsers to behave consistently when non-matching value is set
+ if ( !optionSet ) {
+ elem.selectedIndex = -1;
+ }
+ return values;
+ }
+ }
+ },
+
+ attr: function( elem, name, value ) {
+ var hooks, ret,
+ nType = elem.nodeType;
+
+ // don't get/set attributes on text, comment and attribute nodes
+ if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+ return;
+ }
+
+ // Fallback to prop when attributes are not supported
+ if ( typeof elem.getAttribute === core_strundefined ) {
+ return jQuery.prop( elem, name, value );
+ }
+
+ // All attributes are lowercase
+ // Grab necessary hook if one is defined
+ if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+ name = name.toLowerCase();
+ hooks = jQuery.attrHooks[ name ] ||
+ ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
+ }
+
+ if ( value !== undefined ) {
+
+ if ( value === null ) {
+ jQuery.removeAttr( elem, name );
+
+ } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+ return ret;
+
+ } else {
+ elem.setAttribute( name, value + "" );
+ return value;
+ }
+
+ } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+ return ret;
+
+ } else {
+ ret = jQuery.find.attr( elem, name );
+
+ // Non-existent attributes return null, we normalize to undefined
+ return ret == null ?
+ undefined :
+ ret;
+ }
+ },
+
+ removeAttr: function( elem, value ) {
+ var name, propName,
+ i = 0,
+ attrNames = value && value.match( core_rnotwhite );
+
+ if ( attrNames && elem.nodeType === 1 ) {
+ while ( (name = attrNames[i++]) ) {
+ propName = jQuery.propFix[ name ] || name;
+
+ // Boolean attributes get special treatment (#10870)
+ if ( jQuery.expr.match.bool.test( name ) ) {
+ // Set corresponding property to false
+ elem[ propName ] = false;
+ }
+
+ elem.removeAttribute( name );
+ }
+ }
+ },
+
+ attrHooks: {
+ type: {
+ set: function( elem, value ) {
+ if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+ // Setting the type on a radio button after the value resets the value in IE6-9
+ // Reset value to default in case type is set after value during creation
+ var val = elem.value;
+ elem.setAttribute( "type", value );
+ if ( val ) {
+ elem.value = val;
+ }
+ return value;
+ }
+ }
+ }
+ },
+
+ propFix: {
+ "for": "htmlFor",
+ "class": "className"
+ },
+
+ prop: function( elem, name, value ) {
+ var ret, hooks, notxml,
+ nType = elem.nodeType;
+
+ // don't get/set properties on text, comment and attribute nodes
+ if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+ return;
+ }
+
+ notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+ if ( notxml ) {
+ // Fix name and attach hooks
+ name = jQuery.propFix[ name ] || name;
+ hooks = jQuery.propHooks[ name ];
+ }
+
+ if ( value !== undefined ) {
+ return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
+ ret :
+ ( elem[ name ] = value );
+
+ } else {
+ return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
+ ret :
+ elem[ name ];
+ }
+ },
+
+ propHooks: {
+ tabIndex: {
+ get: function( elem ) {
+ return elem.hasAttribute( "tabindex" ) || rfocusable.test( elem.nodeName ) || elem.href ?
+ elem.tabIndex :
+ -1;
+ }
+ }
+ }
+});
+
+// Hooks for boolean attributes
+boolHook = {
+ set: function( elem, value, name ) {
+ if ( value === false ) {
+ // Remove boolean attributes when set to false
+ jQuery.removeAttr( elem, name );
+ } else {
+ elem.setAttribute( name, name );
+ }
+ return name;
+ }
+};
+jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
+ var getter = jQuery.expr.attrHandle[ name ] || jQuery.find.attr;
+
+ jQuery.expr.attrHandle[ name ] = function( elem, name, isXML ) {
+ var fn = jQuery.expr.attrHandle[ name ],
+ ret = isXML ?
+ undefined :
+ /* jshint eqeqeq: false */
+ // Temporarily disable this handler to check existence
+ (jQuery.expr.attrHandle[ name ] = undefined) !=
+ getter( elem, name, isXML ) ?
+
+ name.toLowerCase() :
+ null;
+
+ // Restore handler
+ jQuery.expr.attrHandle[ name ] = fn;
+
+ return ret;
+ };
+});
+
+// Support: IE9+
+// Selectedness for an option in an optgroup can be inaccurate
+if ( !jQuery.support.optSelected ) {
+ jQuery.propHooks.selected = {
+ get: function( elem ) {
+ var parent = elem.parentNode;
+ if ( parent && parent.parentNode ) {
+ parent.parentNode.selectedIndex;
+ }
+ return null;
+ }
+ };
+}
+
+jQuery.each([
+ "tabIndex",
+ "readOnly",
+ "maxLength",
+ "cellSpacing",
+ "cellPadding",
+ "rowSpan",
+ "colSpan",
+ "useMap",
+ "frameBorder",
+ "contentEditable"
+], function() {
+ jQuery.propFix[ this.toLowerCase() ] = this;
+});
+
+// Radios and checkboxes getter/setter
+jQuery.each([ "radio", "checkbox" ], function() {
+ jQuery.valHooks[ this ] = {
+ set: function( elem, value ) {
+ if ( jQuery.isArray( value ) ) {
+ return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
+ }
+ }
+ };
+ if ( !jQuery.support.checkOn ) {
+ jQuery.valHooks[ this ].get = function( elem ) {
+ // Support: Webkit
+ // "" is returned instead of "on" if a value isn't specified
+ return elem.getAttribute("value") === null ? "on" : elem.value;
+ };
+ }
+});
+var rkeyEvent = /^key/,
+ rmouseEvent = /^(?:mouse|contextmenu)|click/,
+ rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+ rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
+
+function returnTrue() {
+ return true;
+}
+
+function returnFalse() {
+ return false;
+}
+
+function safeActiveElement() {
+ try {
+ return document.activeElement;
+ } catch ( err ) { }
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+ global: {},
+
+ add: function( elem, types, handler, data, selector ) {
+
+ var handleObjIn, eventHandle, tmp,
+ events, t, handleObj,
+ special, handlers, type, namespaces, origType,
+ elemData = data_priv.get( elem );
+
+ // Don't attach events to noData or text/comment nodes (but allow plain objects)
+ if ( !elemData ) {
+ return;
+ }
+
+ // Caller can pass in an object of custom data in lieu of the handler
+ if ( handler.handler ) {
+ handleObjIn = handler;
+ handler = handleObjIn.handler;
+ selector = handleObjIn.selector;
+ }
+
+ // Make sure that the handler has a unique ID, used to find/remove it later
+ if ( !handler.guid ) {
+ handler.guid = jQuery.guid++;
+ }
+
+ // Init the element's event structure and main handler, if this is the first
+ if ( !(events = elemData.events) ) {
+ events = elemData.events = {};
+ }
+ if ( !(eventHandle = elemData.handle) ) {
+ eventHandle = elemData.handle = function( e ) {
+ // Discard the second event of a jQuery.event.trigger() and
+ // when an event is called after a page has unloaded
+ return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?
+ jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
+ undefined;
+ };
+ // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
+ eventHandle.elem = elem;
+ }
+
+ // Handle multiple events separated by a space
+ types = ( types || "" ).match( core_rnotwhite ) || [""];
+ t = types.length;
+ while ( t-- ) {
+ tmp = rtypenamespace.exec( types[t] ) || [];
+ type = origType = tmp[1];
+ namespaces = ( tmp[2] || "" ).split( "." ).sort();
+
+ // There *must* be a type, no attaching namespace-only handlers
+ if ( !type ) {
+ continue;
+ }
+
+ // If event changes its type, use the special event handlers for the changed type
+ special = jQuery.event.special[ type ] || {};
+
+ // If selector defined, determine special event api type, otherwise given type
+ type = ( selector ? special.delegateType : special.bindType ) || type;
+
+ // Update special based on newly reset type
+ special = jQuery.event.special[ type ] || {};
+
+ // handleObj is passed to all event handlers
+ handleObj = jQuery.extend({
+ type: type,
+ origType: origType,
+ data: data,
+ handler: handler,
+ guid: handler.guid,
+ selector: selector,
+ needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+ namespace: namespaces.join(".")
+ }, handleObjIn );
+
+ // Init the event handler queue if we're the first
+ if ( !(handlers = events[ type ]) ) {
+ handlers = events[ type ] = [];
+ handlers.delegateCount = 0;
+
+ // Only use addEventListener if the special events handler returns false
+ if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+ if ( elem.addEventListener ) {
+ elem.addEventListener( type, eventHandle, false );
+ }
+ }
+ }
+
+ if ( special.add ) {
+ special.add.call( elem, handleObj );
+
+ if ( !handleObj.handler.guid ) {
+ handleObj.handler.guid = handler.guid;
+ }
+ }
+
+ // Add to the element's handler list, delegates in front
+ if ( selector ) {
+ handlers.splice( handlers.delegateCount++, 0, handleObj );
+ } else {
+ handlers.push( handleObj );
+ }
+
+ // Keep track of which events have ever been used, for event optimization
+ jQuery.event.global[ type ] = true;
+ }
+
+ // Nullify elem to prevent memory leaks in IE
+ elem = null;
+ },
+
+ // Detach an event or set of events from an element
+ remove: function( elem, types, handler, selector, mappedTypes ) {
+
+ var j, origCount, tmp,
+ events, t, handleObj,
+ special, handlers, type, namespaces, origType,
+ elemData = data_priv.hasData( elem ) && data_priv.get( elem );
+
+ if ( !elemData || !(events = elemData.events) ) {
+ return;
+ }
+
+ // Once for each type.namespace in types; type may be omitted
+ types = ( types || "" ).match( core_rnotwhite ) || [""];
+ t = types.length;
+ while ( t-- ) {
+ tmp = rtypenamespace.exec( types[t] ) || [];
+ type = origType = tmp[1];
+ namespaces = ( tmp[2] || "" ).split( "." ).sort();
+
+ // Unbind all events (on this namespace, if provided) for the element
+ if ( !type ) {
+ for ( type in events ) {
+ jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+ }
+ continue;
+ }
+
+ special = jQuery.event.special[ type ] || {};
+ type = ( selector ? special.delegateType : special.bindType ) || type;
+ handlers = events[ type ] || [];
+ tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
+
+ // Remove matching events
+ origCount = j = handlers.length;
+ while ( j-- ) {
+ handleObj = handlers[ j ];
+
+ if ( ( mappedTypes || origType === handleObj.origType ) &&
+ ( !handler || handler.guid === handleObj.guid ) &&
+ ( !tmp || tmp.test( handleObj.namespace ) ) &&
+ ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
+ handlers.splice( j, 1 );
+
+ if ( handleObj.selector ) {
+ handlers.delegateCount--;
+ }
+ if ( special.remove ) {
+ special.remove.call( elem, handleObj );
+ }
+ }
+ }
+
+ // Remove generic event handler if we removed something and no more handlers exist
+ // (avoids potential for endless recursion during removal of special event handlers)
+ if ( origCount && !handlers.length ) {
+ if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+ jQuery.removeEvent( elem, type, elemData.handle );
+ }
+
+ delete events[ type ];
+ }
+ }
+
+ // Remove the expando if it's no longer used
+ if ( jQuery.isEmptyObject( events ) ) {
+ delete elemData.handle;
+ data_priv.remove( elem, "events" );
+ }
+ },
+
+ trigger: function( event, data, elem, onlyHandlers ) {
+
+ var i, cur, tmp, bubbleType, ontype, handle, special,
+ eventPath = [ elem || document ],
+ type = core_hasOwn.call( event, "type" ) ? event.type : event,
+ namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
+
+ cur = tmp = elem = elem || document;
+
+ // Don't do events on text and comment nodes
+ if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+ return;
+ }
+
+ // focus/blur morphs to focusin/out; ensure we're not firing them right now
+ if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+ return;
+ }
+
+ if ( type.indexOf(".") >= 0 ) {
+ // Namespaced trigger; create a regexp to match event type in handle()
+ namespaces = type.split(".");
+ type = namespaces.shift();
+ namespaces.sort();
+ }
+ ontype = type.indexOf(":") < 0 && "on" + type;
+
+ // Caller can pass in a jQuery.Event object, Object, or just an event type string
+ event = event[ jQuery.expando ] ?
+ event :
+ new jQuery.Event( type, typeof event === "object" && event );
+
+ // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
+ event.isTrigger = onlyHandlers ? 2 : 3;
+ event.namespace = namespaces.join(".");
+ event.namespace_re = event.namespace ?
+ new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
+ null;
+
+ // Clean up the event in case it is being reused
+ event.result = undefined;
+ if ( !event.target ) {
+ event.target = elem;
+ }
+
+ // Clone any incoming data and prepend the event, creating the handler arg list
+ data = data == null ?
+ [ event ] :
+ jQuery.makeArray( data, [ event ] );
+
+ // Allow special events to draw outside the lines
+ special = jQuery.event.special[ type ] || {};
+ if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+ return;
+ }
+
+ // Determine event propagation path in advance, per W3C events spec (#9951)
+ // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+ if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+ bubbleType = special.delegateType || type;
+ if ( !rfocusMorph.test( bubbleType + type ) ) {
+ cur = cur.parentNode;
+ }
+ for ( ; cur; cur = cur.parentNode ) {
+ eventPath.push( cur );
+ tmp = cur;
+ }
+
+ // Only add window if we got to document (e.g., not plain obj or detached DOM)
+ if ( tmp === (elem.ownerDocument || document) ) {
+ eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+ }
+ }
+
+ // Fire handlers on the event path
+ i = 0;
+ while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
+
+ event.type = i > 1 ?
+ bubbleType :
+ special.bindType || type;
+
+ // jQuery handler
+ handle = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( cur, "handle" );
+ if ( handle ) {
+ handle.apply( cur, data );
+ }
+
+ // Native handler
+ handle = ontype && cur[ ontype ];
+ if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {
+ event.preventDefault();
+ }
+ }
+ event.type = type;
+
+ // If nobody prevented the default action, do it now
+ if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+ if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&
+ jQuery.acceptData( elem ) ) {
+
+ // Call a native DOM method on the target with the same name name as the event.
+ // Don't do default actions on window, that's where global variables be (#6170)
+ if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
+
+ // Don't re-trigger an onFOO event when we call its FOO() method
+ tmp = elem[ ontype ];
+
+ if ( tmp ) {
+ elem[ ontype ] = null;
+ }
+
+ // Prevent re-triggering of the same event, since we already bubbled it above
+ jQuery.event.triggered = type;
+ elem[ type ]();
+ jQuery.event.triggered = undefined;
+
+ if ( tmp ) {
+ elem[ ontype ] = tmp;
+ }
+ }
+ }
+ }
+
+ return event.result;
+ },
+
+ dispatch: function( event ) {
+
+ // Make a writable jQuery.Event from the native event object
+ event = jQuery.event.fix( event );
+
+ var i, j, ret, matched, handleObj,
+ handlerQueue = [],
+ args = core_slice.call( arguments ),
+ handlers = ( data_priv.get( this, "events" ) || {} )[ event.type ] || [],
+ special = jQuery.event.special[ event.type ] || {};
+
+ // Use the fix-ed jQuery.Event rather than the (read-only) native event
+ args[0] = event;
+ event.delegateTarget = this;
+
+ // Call the preDispatch hook for the mapped type, and let it bail if desired
+ if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+ return;
+ }
+
+ // Determine handlers
+ handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+ // Run delegates first; they may want to stop propagation beneath us
+ i = 0;
+ while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
+ event.currentTarget = matched.elem;
+
+ j = 0;
+ while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
+
+ // Triggered event must either 1) have no namespace, or
+ // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
+ if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
+
+ event.handleObj = handleObj;
+ event.data = handleObj.data;
+
+ ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
+ .apply( matched.elem, args );
+
+ if ( ret !== undefined ) {
+ if ( (event.result = ret) === false ) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ }
+ }
+ }
+ }
+
+ // Call the postDispatch hook for the mapped type
+ if ( special.postDispatch ) {
+ special.postDispatch.call( this, event );
+ }
+
+ return event.result;
+ },
+
+ handlers: function( event, handlers ) {
+ var i, matches, sel, handleObj,
+ handlerQueue = [],
+ delegateCount = handlers.delegateCount,
+ cur = event.target;
+
+ // Find delegate handlers
+ // Black-hole SVG <use> instance trees (#13180)
+ // Avoid non-left-click bubbling in Firefox (#3861)
+ if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
+
+ for ( ; cur !== this; cur = cur.parentNode || this ) {
+
+ // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+ if ( cur.disabled !== true || event.type !== "click" ) {
+ matches = [];
+ for ( i = 0; i < delegateCount; i++ ) {
+ handleObj = handlers[ i ];
+
+ // Don't conflict with Object.prototype properties (#13203)
+ sel = handleObj.selector + " ";
+
+ if ( matches[ sel ] === undefined ) {
+ matches[ sel ] = handleObj.needsContext ?
+ jQuery( sel, this ).index( cur ) >= 0 :
+ jQuery.find( sel, this, null, [ cur ] ).length;
+ }
+ if ( matches[ sel ] ) {
+ matches.push( handleObj );
+ }
+ }
+ if ( matches.length ) {
+ handlerQueue.push({ elem: cur, handlers: matches });
+ }
+ }
+ }
+ }
+
+ // Add the remaining (directly-bound) handlers
+ if ( delegateCount < handlers.length ) {
+ handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
+ }
+
+ return handlerQueue;
+ },
+
+ // Includes some event props shared by KeyEvent and MouseEvent
+ props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+
+ fixHooks: {},
+
+ keyHooks: {
+ props: "char charCode key keyCode".split(" "),
+ filter: function( event, original ) {
+
+ // Add which for key events
+ if ( event.which == null ) {
+ event.which = original.charCode != null ? original.charCode : original.keyCode;
+ }
+
+ return event;
+ }
+ },
+
+ mouseHooks: {
+ props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+ filter: function( event, original ) {
+ var eventDoc, doc, body,
+ button = original.button;
+
+ // Calculate pageX/Y if missing and clientX/Y available
+ if ( event.pageX == null && original.clientX != null ) {
+ eventDoc = event.target.ownerDocument || document;
+ doc = eventDoc.documentElement;
+ body = eventDoc.body;
+
+ event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
+ event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );
+ }
+
+ // Add which for click: 1 === left; 2 === middle; 3 === right
+ // Note: button is not normalized, so don't use it
+ if ( !event.which && button !== undefined ) {
+ event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+ }
+
+ return event;
+ }
+ },
+
+ fix: function( event ) {
+ if ( event[ jQuery.expando ] ) {
+ return event;
+ }
+
+ // Create a writable copy of the event object and normalize some properties
+ var i, prop, copy,
+ type = event.type,
+ originalEvent = event,
+ fixHook = this.fixHooks[ type ];
+
+ if ( !fixHook ) {
+ this.fixHooks[ type ] = fixHook =
+ rmouseEvent.test( type ) ? this.mouseHooks :
+ rkeyEvent.test( type ) ? this.keyHooks :
+ {};
+ }
+ copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+
+ event = new jQuery.Event( originalEvent );
+
+ i = copy.length;
+ while ( i-- ) {
+ prop = copy[ i ];
+ event[ prop ] = originalEvent[ prop ];
+ }
+
+ // Support: Cordova 2.5 (WebKit) (#13255)
+ // All events should have a target; Cordova deviceready doesn't
+ if ( !event.target ) {
+ event.target = document;
+ }
+
+ // Support: Safari 6.0+, Chrome < 28
+ // Target should not be a text node (#504, #13143)
+ if ( event.target.nodeType === 3 ) {
+ event.target = event.target.parentNode;
+ }
+
+ return fixHook.filter? fixHook.filter( event, originalEvent ) : event;
+ },
+
+ special: {
+ load: {
+ // Prevent triggered image.load events from bubbling to window.load
+ noBubble: true
+ },
+ focus: {
+ // Fire native event if possible so blur/focus sequence is correct
+ trigger: function() {
+ if ( this !== safeActiveElement() && this.focus ) {
+ this.focus();
+ return false;
+ }
+ },
+ delegateType: "focusin"
+ },
+ blur: {
+ trigger: function() {
+ if ( this === safeActiveElement() && this.blur ) {
+ this.blur();
+ return false;
+ }
+ },
+ delegateType: "focusout"
+ },
+ click: {
+ // For checkbox, fire native event so checked state will be right
+ trigger: function() {
+ if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) {
+ this.click();
+ return false;
+ }
+ },
+
+ // For cross-browser consistency, don't fire native .click() on links
+ _default: function( event ) {
+ return jQuery.nodeName( event.target, "a" );
+ }
+ },
+
+ beforeunload: {
+ postDispatch: function( event ) {
+
+ // Support: Firefox 20+
+ // Firefox doesn't alert if the returnValue field is not set.
+ if ( event.result !== undefined ) {
+ event.originalEvent.returnValue = event.result;
+ }
+ }
+ }
+ },
+
+ simulate: function( type, elem, event, bubble ) {
+ // Piggyback on a donor event to simulate a different one.
+ // Fake originalEvent to avoid donor's stopPropagation, but if the
+ // simulated event prevents default then we do the same on the donor.
+ var e = jQuery.extend(
+ new jQuery.Event(),
+ event,
+ {
+ type: type,
+ isSimulated: true,
+ originalEvent: {}
+ }
+ );
+ if ( bubble ) {
+ jQuery.event.trigger( e, null, elem );
+ } else {
+ jQuery.event.dispatch.call( elem, e );
+ }
+ if ( e.isDefaultPrevented() ) {
+ event.preventDefault();
+ }
+ }
+};
+
+jQuery.removeEvent = function( elem, type, handle ) {
+ if ( elem.removeEventListener ) {
+ elem.removeEventListener( type, handle, false );
+ }
+};
+
+jQuery.Event = function( src, props ) {
+ // Allow instantiation without the 'new' keyword
+ if ( !(this instanceof jQuery.Event) ) {
+ return new jQuery.Event( src, props );
+ }
+
+ // Event object
+ if ( src && src.type ) {
+ this.originalEvent = src;
+ this.type = src.type;
+
+ // Events bubbling up the document may have been marked as prevented
+ // by a handler lower down the tree; reflect the correct value.
+ this.isDefaultPrevented = ( src.defaultPrevented ||
+ src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
+
+ // Event type
+ } else {
+ this.type = src;
+ }
+
+ // Put explicitly provided properties onto the event object
+ if ( props ) {
+ jQuery.extend( this, props );
+ }
+
+ // Create a timestamp if incoming event doesn't have one
+ this.timeStamp = src && src.timeStamp || jQuery.now();
+
+ // Mark it as fixed
+ this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+ isDefaultPrevented: returnFalse,
+ isPropagationStopped: returnFalse,
+ isImmediatePropagationStopped: returnFalse,
+
+ preventDefault: function() {
+ var e = this.originalEvent;
+
+ this.isDefaultPrevented = returnTrue;
+
+ if ( e && e.preventDefault ) {
+ e.preventDefault();
+ }
+ },
+ stopPropagation: function() {
+ var e = this.originalEvent;
+
+ this.isPropagationStopped = returnTrue;
+
+ if ( e && e.stopPropagation ) {
+ e.stopPropagation();
+ }
+ },
+ stopImmediatePropagation: function() {
+ this.isImmediatePropagationStopped = returnTrue;
+ this.stopPropagation();
+ }
+};
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+// Support: Chrome 15+
+jQuery.each({
+ mouseenter: "mouseover",
+ mouseleave: "mouseout"
+}, function( orig, fix ) {
+ jQuery.event.special[ orig ] = {
+ delegateType: fix,
+ bindType: fix,
+
+ handle: function( event ) {
+ var ret,
+ target = this,
+ related = event.relatedTarget,
+ handleObj = event.handleObj;
+
+ // For mousenter/leave call the handler if related is outside the target.
+ // NB: No relatedTarget if the mouse left/entered the browser window
+ if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
+ event.type = handleObj.origType;
+ ret = handleObj.handler.apply( this, arguments );
+ event.type = fix;
+ }
+ return ret;
+ }
+ };
+});
+
+// Create "bubbling" focus and blur events
+// Support: Firefox, Chrome, Safari
+if ( !jQuery.support.focusinBubbles ) {
+ jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+ // Attach a single capturing handler while someone wants focusin/focusout
+ var attaches = 0,
+ handler = function( event ) {
+ jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
+ };
+
+ jQuery.event.special[ fix ] = {
+ setup: function() {
+ if ( attaches++ === 0 ) {
+ document.addEventListener( orig, handler, true );
+ }
+ },
+ teardown: function() {
+ if ( --attaches === 0 ) {
+ document.removeEventListener( orig, handler, true );
+ }
+ }
+ };
+ });
+}
+
+jQuery.fn.extend({
+
+ on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
+ var origFn, type;
+
+ // Types can be a map of types/handlers
+ if ( typeof types === "object" ) {
+ // ( types-Object, selector, data )
+ if ( typeof selector !== "string" ) {
+ // ( types-Object, data )
+ data = data || selector;
+ selector = undefined;
+ }
+ for ( type in types ) {
+ this.on( type, selector, data, types[ type ], one );
+ }
+ return this;
+ }
+
+ if ( data == null && fn == null ) {
+ // ( types, fn )
+ fn = selector;
+ data = selector = undefined;
+ } else if ( fn == null ) {
+ if ( typeof selector === "string" ) {
+ // ( types, selector, fn )
+ fn = data;
+ data = undefined;
+ } else {
+ // ( types, data, fn )
+ fn = data;
+ data = selector;
+ selector = undefined;
+ }
+ }
+ if ( fn === false ) {
+ fn = returnFalse;
+ } else if ( !fn ) {
+ return this;
+ }
+
+ if ( one === 1 ) {
+ origFn = fn;
+ fn = function( event ) {
+ // Can use an empty set, since event contains the info
+ jQuery().off( event );
+ return origFn.apply( this, arguments );
+ };
+ // Use same guid so caller can remove using origFn
+ fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+ }
+ return this.each( function() {
+ jQuery.event.add( this, types, fn, data, selector );
+ });
+ },
+ one: function( types, selector, data, fn ) {
+ return this.on( types, selector, data, fn, 1 );
+ },
+ off: function( types, selector, fn ) {
+ var handleObj, type;
+ if ( types && types.preventDefault && types.handleObj ) {
+ // ( event ) dispatched jQuery.Event
+ handleObj = types.handleObj;
+ jQuery( types.delegateTarget ).off(
+ handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
+ handleObj.selector,
+ handleObj.handler
+ );
+ return this;
+ }
+ if ( typeof types === "object" ) {
+ // ( types-object [, selector] )
+ for ( type in types ) {
+ this.off( type, selector, types[ type ] );
+ }
+ return this;
+ }
+ if ( selector === false || typeof selector === "function" ) {
+ // ( types [, fn] )
+ fn = selector;
+ selector = undefined;
+ }
+ if ( fn === false ) {
+ fn = returnFalse;
+ }
+ return this.each(function() {
+ jQuery.event.remove( this, types, fn, selector );
+ });
+ },
+
+ trigger: function( type, data ) {
+ return this.each(function() {
+ jQuery.event.trigger( type, data, this );
+ });
+ },
+ triggerHandler: function( type, data ) {
+ var elem = this[0];
+ if ( elem ) {
+ return jQuery.event.trigger( type, data, elem, true );
+ }
+ }
+});
+var isSimple = /^.[^:#\[\.,]*$/,
+ rparentsprev = /^(?:parents|prev(?:Until|All))/,
+ rneedsContext = jQuery.expr.match.needsContext,
+ // methods guaranteed to produce a unique set when starting from a unique set
+ guaranteedUnique = {
+ children: true,
+ contents: true,
+ next: true,
+ prev: true
+ };
+
+jQuery.fn.extend({
+ find: function( selector ) {
+ var i,
+ ret = [],
+ self = this,
+ len = self.length;
+
+ if ( typeof selector !== "string" ) {
+ return this.pushStack( jQuery( selector ).filter(function() {
+ for ( i = 0; i < len; i++ ) {
+ if ( jQuery.contains( self[ i ], this ) ) {
+ return true;
+ }
+ }
+ }) );
+ }
+
+ for ( i = 0; i < len; i++ ) {
+ jQuery.find( selector, self[ i ], ret );
+ }
+
+ // Needed because $( selector, context ) becomes $( context ).find( selector )
+ ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
+ ret.selector = this.selector ? this.selector + " " + selector : selector;
+ return ret;
+ },
+
+ has: function( target ) {
+ var targets = jQuery( target, this ),
+ l = targets.length;
+
+ return this.filter(function() {
+ var i = 0;
+ for ( ; i < l; i++ ) {
+ if ( jQuery.contains( this, targets[i] ) ) {
+ return true;
+ }
+ }
+ });
+ },
+
+ not: function( selector ) {
+ return this.pushStack( winnow(this, selector || [], true) );
+ },
+
+ filter: function( selector ) {
+ return this.pushStack( winnow(this, selector || [], false) );
+ },
+
+ is: function( selector ) {
+ return !!winnow(
+ this,
+
+ // If this is a positional/relative selector, check membership in the returned set
+ // so $("p:first").is("p:last") won't return true for a doc with two "p".
+ typeof selector === "string" && rneedsContext.test( selector ) ?
+ jQuery( selector ) :
+ selector || [],
+ false
+ ).length;
+ },
+
+ closest: function( selectors, context ) {
+ var cur,
+ i = 0,
+ l = this.length,
+ matched = [],
+ pos = ( rneedsContext.test( selectors ) || typeof selectors !== "string" ) ?
+ jQuery( selectors, context || this.context ) :
+ 0;
+
+ for ( ; i < l; i++ ) {
+ for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
+ // Always skip document fragments
+ if ( cur.nodeType < 11 && (pos ?
+ pos.index(cur) > -1 :
+
+ // Don't pass non-elements to Sizzle
+ cur.nodeType === 1 &&
+ jQuery.find.matchesSelector(cur, selectors)) ) {
+
+ cur = matched.push( cur );
+ break;
+ }
+ }
+ }
+
+ return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );
+ },
+
+ // Determine the position of an element within
+ // the matched set of elements
+ index: function( elem ) {
+
+ // No argument, return index in parent
+ if ( !elem ) {
+ return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
+ }
+
+ // index in selector
+ if ( typeof elem === "string" ) {
+ return core_indexOf.call( jQuery( elem ), this[ 0 ] );
+ }
+
+ // Locate the position of the desired element
+ return core_indexOf.call( this,
+
+ // If it receives a jQuery object, the first element is used
+ elem.jquery ? elem[ 0 ] : elem
+ );
+ },
+
+ add: function( selector, context ) {
+ var set = typeof selector === "string" ?
+ jQuery( selector, context ) :
+ jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
+ all = jQuery.merge( this.get(), set );
+
+ return this.pushStack( jQuery.unique(all) );
+ },
+
+ addBack: function( selector ) {
+ return this.add( selector == null ?
+ this.prevObject : this.prevObject.filter(selector)
+ );
+ }
+});
+
+function sibling( cur, dir ) {
+ while ( (cur = cur[dir]) && cur.nodeType !== 1 ) {}
+
+ return cur;
+}
+
+jQuery.each({
+ parent: function( elem ) {
+ var parent = elem.parentNode;
+ return parent && parent.nodeType !== 11 ? parent : null;
+ },
+ parents: function( elem ) {
+ return jQuery.dir( elem, "parentNode" );
+ },
+ parentsUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "parentNode", until );
+ },
+ next: function( elem ) {
+ return sibling( elem, "nextSibling" );
+ },
+ prev: function( elem ) {
+ return sibling( elem, "previousSibling" );
+ },
+ nextAll: function( elem ) {
+ return jQuery.dir( elem, "nextSibling" );
+ },
+ prevAll: function( elem ) {
+ return jQuery.dir( elem, "previousSibling" );
+ },
+ nextUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "nextSibling", until );
+ },
+ prevUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "previousSibling", until );
+ },
+ siblings: function( elem ) {
+ return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
+ },
+ children: function( elem ) {
+ return jQuery.sibling( elem.firstChild );
+ },
+ contents: function( elem ) {
+ return elem.contentDocument || jQuery.merge( [], elem.childNodes );
+ }
+}, function( name, fn ) {
+ jQuery.fn[ name ] = function( until, selector ) {
+ var matched = jQuery.map( this, fn, until );
+
+ if ( name.slice( -5 ) !== "Until" ) {
+ selector = until;
+ }
+
+ if ( selector && typeof selector === "string" ) {
+ matched = jQuery.filter( selector, matched );
+ }
+
+ if ( this.length > 1 ) {
+ // Remove duplicates
+ if ( !guaranteedUnique[ name ] ) {
+ jQuery.unique( matched );
+ }
+
+ // Reverse order for parents* and prev-derivatives
+ if ( rparentsprev.test( name ) ) {
+ matched.reverse();
+ }
+ }
+
+ return this.pushStack( matched );
+ };
+});
+
+jQuery.extend({
+ filter: function( expr, elems, not ) {
+ var elem = elems[ 0 ];
+
+ if ( not ) {
+ expr = ":not(" + expr + ")";
+ }
+
+ return elems.length === 1 && elem.nodeType === 1 ?
+ jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
+ jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
+ return elem.nodeType === 1;
+ }));
+ },
+
+ dir: function( elem, dir, until ) {
+ var matched = [],
+ truncate = until !== undefined;
+
+ while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) {
+ if ( elem.nodeType === 1 ) {
+ if ( truncate && jQuery( elem ).is( until ) ) {
+ break;
+ }
+ matched.push( elem );
+ }
+ }
+ return matched;
+ },
+
+ sibling: function( n, elem ) {
+ var matched = [];
+
+ for ( ; n; n = n.nextSibling ) {
+ if ( n.nodeType === 1 && n !== elem ) {
+ matched.push( n );
+ }
+ }
+
+ return matched;
+ }
+});
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+ if ( jQuery.isFunction( qualifier ) ) {
+ return jQuery.grep( elements, function( elem, i ) {
+ /* jshint -W018 */
+ return !!qualifier.call( elem, i, elem ) !== not;
+ });
+
+ }
+
+ if ( qualifier.nodeType ) {
+ return jQuery.grep( elements, function( elem ) {
+ return ( elem === qualifier ) !== not;
+ });
+
+ }
+
+ if ( typeof qualifier === "string" ) {
+ if ( isSimple.test( qualifier ) ) {
+ return jQuery.filter( qualifier, elements, not );
+ }
+
+ qualifier = jQuery.filter( qualifier, elements );
+ }
+
+ return jQuery.grep( elements, function( elem ) {
+ return ( core_indexOf.call( qualifier, elem ) >= 0 ) !== not;
+ });
+}
+var rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
+ rtagName = /<([\w:]+)/,
+ rhtml = /<|&#?\w+;/,
+ rnoInnerhtml = /<(?:script|style|link)/i,
+ manipulation_rcheckableType = /^(?:checkbox|radio)$/i,
+ // checked="checked" or checked
+ rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+ rscriptType = /^$|\/(?:java|ecma)script/i,
+ rscriptTypeMasked = /^true\/(.*)/,
+ rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
+
+ // We have to close these tags to support XHTML (#13200)
+ wrapMap = {
+
+ // Support: IE 9
+ option: [ 1, "<select multiple='multiple'>", "</select>" ],
+
+ thead: [ 1, "<table>", "</table>" ],
+ col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
+ tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+ td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+ _default: [ 0, "", "" ]
+ };
+
+// Support: IE 9
+wrapMap.optgroup = wrapMap.option;
+
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+jQuery.fn.extend({
+ text: function( value ) {
+ return jQuery.access( this, function( value ) {
+ return value === undefined ?
+ jQuery.text( this ) :
+ this.empty().append( ( this[ 0 ] && this[ 0 ].ownerDocument || document ).createTextNode( value ) );
+ }, null, value, arguments.length );
+ },
+
+ append: function() {
+ return this.domManip( arguments, function( elem ) {
+ if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+ var target = manipulationTarget( this, elem );
+ target.appendChild( elem );
+ }
+ });
+ },
+
+ prepend: function() {
+ return this.domManip( arguments, function( elem ) {
+ if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+ var target = manipulationTarget( this, elem );
+ target.insertBefore( elem, target.firstChild );
+ }
+ });
+ },
+
+ before: function() {
+ return this.domManip( arguments, function( elem ) {
+ if ( this.parentNode ) {
+ this.parentNode.insertBefore( elem, this );
+ }
+ });
+ },
+
+ after: function() {
+ return this.domManip( arguments, function( elem ) {
+ if ( this.parentNode ) {
+ this.parentNode.insertBefore( elem, this.nextSibling );
+ }
+ });
+ },
+
+ // keepData is for internal use only--do not document
+ remove: function( selector, keepData ) {
+ var elem,
+ elems = selector ? jQuery.filter( selector, this ) : this,
+ i = 0;
+
+ for ( ; (elem = elems[i]) != null; i++ ) {
+ if ( !keepData && elem.nodeType === 1 ) {
+ jQuery.cleanData( getAll( elem ) );
+ }
+
+ if ( elem.parentNode ) {
+ if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
+ setGlobalEval( getAll( elem, "script" ) );
+ }
+ elem.parentNode.removeChild( elem );
+ }
+ }
+
+ return this;
+ },
+
+ empty: function() {
+ var elem,
+ i = 0;
+
+ for ( ; (elem = this[i]) != null; i++ ) {
+ if ( elem.nodeType === 1 ) {
+
+ // Prevent memory leaks
+ jQuery.cleanData( getAll( elem, false ) );
+
+ // Remove any remaining nodes
+ elem.textContent = "";
+ }
+ }
+
+ return this;
+ },
+
+ clone: function( dataAndEvents, deepDataAndEvents ) {
+ dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+ deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+ return this.map( function () {
+ return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+ });
+ },
+
+ html: function( value ) {
+ return jQuery.access( this, function( value ) {
+ var elem = this[ 0 ] || {},
+ i = 0,
+ l = this.length;
+
+ if ( value === undefined && elem.nodeType === 1 ) {
+ return elem.innerHTML;
+ }
+
+ // See if we can take a shortcut and just use innerHTML
+ if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+ !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
+
+ value = value.replace( rxhtmlTag, "<$1></$2>" );
+
+ try {
+ for ( ; i < l; i++ ) {
+ elem = this[ i ] || {};
+
+ // Remove element nodes and prevent memory leaks
+ if ( elem.nodeType === 1 ) {
+ jQuery.cleanData( getAll( elem, false ) );
+ elem.innerHTML = value;
+ }
+ }
+
+ elem = 0;
+
+ // If using innerHTML throws an exception, use the fallback method
+ } catch( e ) {}
+ }
+
+ if ( elem ) {
+ this.empty().append( value );
+ }
+ }, null, value, arguments.length );
+ },
+
+ replaceWith: function() {
+ var
+ // Snapshot the DOM in case .domManip sweeps something relevant into its fragment
+ args = jQuery.map( this, function( elem ) {
+ return [ elem.nextSibling, elem.parentNode ];
+ }),
+ i = 0;
+
+ // Make the changes, replacing each context element with the new content
+ this.domManip( arguments, function( elem ) {
+ var next = args[ i++ ],
+ parent = args[ i++ ];
+
+ if ( parent ) {
+ // Don't use the snapshot next if it has moved (#13810)
+ if ( next && next.parentNode !== parent ) {
+ next = this.nextSibling;
+ }
+ jQuery( this ).remove();
+ parent.insertBefore( elem, next );
+ }
+ // Allow new content to include elements from the context set
+ }, true );
+
+ // Force removal if there was no new content (e.g., from empty arguments)
+ return i ? this : this.remove();
+ },
+
+ detach: function( selector ) {
+ return this.remove( selector, true );
+ },
+
+ domManip: function( args, callback, allowIntersection ) {
+
+ // Flatten any nested arrays
+ args = core_concat.apply( [], args );
+
+ var fragment, first, scripts, hasScripts, node, doc,
+ i = 0,
+ l = this.length,
+ set = this,
+ iNoClone = l - 1,
+ value = args[ 0 ],
+ isFunction = jQuery.isFunction( value );
+
+ // We can't cloneNode fragments that contain checked, in WebKit
+ if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {
+ return this.each(function( index ) {
+ var self = set.eq( index );
+ if ( isFunction ) {
+ args[ 0 ] = value.call( this, index, self.html() );
+ }
+ self.domManip( args, callback, allowIntersection );
+ });
+ }
+
+ if ( l ) {
+ fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, !allowIntersection && this );
+ first = fragment.firstChild;
+
+ if ( fragment.childNodes.length === 1 ) {
+ fragment = first;
+ }
+
+ if ( first ) {
+ scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+ hasScripts = scripts.length;
+
+ // Use the original fragment for the last item instead of the first because it can end up
+ // being emptied incorrectly in certain situations (#8070).
+ for ( ; i < l; i++ ) {
+ node = fragment;
+
+ if ( i !== iNoClone ) {
+ node = jQuery.clone( node, true, true );
+
+ // Keep references to cloned scripts for later restoration
+ if ( hasScripts ) {
+ // Support: QtWebKit
+ // jQuery.merge because core_push.apply(_, arraylike) throws
+ jQuery.merge( scripts, getAll( node, "script" ) );
+ }
+ }
+
+ callback.call( this[ i ], node, i );
+ }
+
+ if ( hasScripts ) {
+ doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+ // Reenable scripts
+ jQuery.map( scripts, restoreScript );
+
+ // Evaluate executable scripts on first document insertion
+ for ( i = 0; i < hasScripts; i++ ) {
+ node = scripts[ i ];
+ if ( rscriptType.test( node.type || "" ) &&
+ !data_priv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
+
+ if ( node.src ) {
+ // Hope ajax is available...
+ jQuery._evalUrl( node.src );
+ } else {
+ jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) );
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return this;
+ }
+});
+
+jQuery.each({
+ appendTo: "append",
+ prependTo: "prepend",
+ insertBefore: "before",
+ insertAfter: "after",
+ replaceAll: "replaceWith"
+}, function( name, original ) {
+ jQuery.fn[ name ] = function( selector ) {
+ var elems,
+ ret = [],
+ insert = jQuery( selector ),
+ last = insert.length - 1,
+ i = 0;
+
+ for ( ; i <= last; i++ ) {
+ elems = i === last ? this : this.clone( true );
+ jQuery( insert[ i ] )[ original ]( elems );
+
+ // Support: QtWebKit
+ // .get() because core_push.apply(_, arraylike) throws
+ core_push.apply( ret, elems.get() );
+ }
+
+ return this.pushStack( ret );
+ };
+});
+
+jQuery.extend({
+ clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+ var i, l, srcElements, destElements,
+ clone = elem.cloneNode( true ),
+ inPage = jQuery.contains( elem.ownerDocument, elem );
+
+ // Support: IE >= 9
+ // Fix Cloning issues
+ if ( !jQuery.support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && !jQuery.isXMLDoc( elem ) ) {
+
+ // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
+ destElements = getAll( clone );
+ srcElements = getAll( elem );
+
+ for ( i = 0, l = srcElements.length; i < l; i++ ) {
+ fixInput( srcElements[ i ], destElements[ i ] );
+ }
+ }
+
+ // Copy the events from the original to the clone
+ if ( dataAndEvents ) {
+ if ( deepDataAndEvents ) {
+ srcElements = srcElements || getAll( elem );
+ destElements = destElements || getAll( clone );
+
+ for ( i = 0, l = srcElements.length; i < l; i++ ) {
+ cloneCopyEvent( srcElements[ i ], destElements[ i ] );
+ }
+ } else {
+ cloneCopyEvent( elem, clone );
+ }
+ }
+
+ // Preserve script evaluation history
+ destElements = getAll( clone, "script" );
+ if ( destElements.length > 0 ) {
+ setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+ }
+
+ // Return the cloned set
+ return clone;
+ },
+
+ buildFragment: function( elems, context, scripts, selection ) {
+ var elem, tmp, tag, wrap, contains, j,
+ i = 0,
+ l = elems.length,
+ fragment = context.createDocumentFragment(),
+ nodes = [];
+
+ for ( ; i < l; i++ ) {
+ elem = elems[ i ];
+
+ if ( elem || elem === 0 ) {
+
+ // Add nodes directly
+ if ( jQuery.type( elem ) === "object" ) {
+ // Support: QtWebKit
+ // jQuery.merge because core_push.apply(_, arraylike) throws
+ jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+ // Convert non-html into a text node
+ } else if ( !rhtml.test( elem ) ) {
+ nodes.push( context.createTextNode( elem ) );
+
+ // Convert html into DOM nodes
+ } else {
+ tmp = tmp || fragment.appendChild( context.createElement("div") );
+
+ // Deserialize a standard representation
+ tag = ( rtagName.exec( elem ) || ["", ""] )[ 1 ].toLowerCase();
+ wrap = wrapMap[ tag ] || wrapMap._default;
+ tmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[ 2 ];
+
+ // Descend through wrappers to the right content
+ j = wrap[ 0 ];
+ while ( j-- ) {
+ tmp = tmp.lastChild;
+ }
+
+ // Support: QtWebKit
+ // jQuery.merge because core_push.apply(_, arraylike) throws
+ jQuery.merge( nodes, tmp.childNodes );
+
+ // Remember the top-level container
+ tmp = fragment.firstChild;
+
+ // Fixes #12346
+ // Support: Webkit, IE
+ tmp.textContent = "";
+ }
+ }
+ }
+
+ // Remove wrapper from fragment
+ fragment.textContent = "";
+
+ i = 0;
+ while ( (elem = nodes[ i++ ]) ) {
+
+ // #4087 - If origin and destination elements are the same, and this is
+ // that element, do not do anything
+ if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
+ continue;
+ }
+
+ contains = jQuery.contains( elem.ownerDocument, elem );
+
+ // Append to fragment
+ tmp = getAll( fragment.appendChild( elem ), "script" );
+
+ // Preserve script evaluation history
+ if ( contains ) {
+ setGlobalEval( tmp );
+ }
+
+ // Capture executables
+ if ( scripts ) {
+ j = 0;
+ while ( (elem = tmp[ j++ ]) ) {
+ if ( rscriptType.test( elem.type || "" ) ) {
+ scripts.push( elem );
+ }
+ }
+ }
+ }
+
+ return fragment;
+ },
+
+ cleanData: function( elems ) {
+ var data, elem, events, type, key, j,
+ special = jQuery.event.special,
+ i = 0;
+
+ for ( ; (elem = elems[ i ]) !== undefined; i++ ) {
+ if ( Data.accepts( elem ) ) {
+ key = elem[ data_priv.expando ];
+
+ if ( key && (data = data_priv.cache[ key ]) ) {
+ events = Object.keys( data.events || {} );
+ if ( events.length ) {
+ for ( j = 0; (type = events[j]) !== undefined; j++ ) {
+ if ( special[ type ] ) {
+ jQuery.event.remove( elem, type );
+
+ // This is a shortcut to avoid jQuery.event.remove's overhead
+ } else {
+ jQuery.removeEvent( elem, type, data.handle );
+ }
+ }
+ }
+ if ( data_priv.cache[ key ] ) {
+ // Discard any remaining `private` data
+ delete data_priv.cache[ key ];
+ }
+ }
+ }
+ // Discard any remaining `user` data
+ delete data_user.cache[ elem[ data_user.expando ] ];
+ }
+ },
+
+ _evalUrl: function( url ) {
+ return jQuery.ajax({
+ url: url,
+ type: "GET",
+ dataType: "script",
+ async: false,
+ global: false,
+ "throws": true
+ });
+ }
+});
+
+// Support: 1.x compatibility
+// Manipulating tables requires a tbody
+function manipulationTarget( elem, content ) {
+ return jQuery.nodeName( elem, "table" ) &&
+ jQuery.nodeName( content.nodeType === 1 ? content : content.firstChild, "tr" ) ?
+
+ elem.getElementsByTagName("tbody")[0] ||
+ elem.appendChild( elem.ownerDocument.createElement("tbody") ) :
+ elem;
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+ elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type;
+ return elem;
+}
+function restoreScript( elem ) {
+ var match = rscriptTypeMasked.exec( elem.type );
+
+ if ( match ) {
+ elem.type = match[ 1 ];
+ } else {
+ elem.removeAttribute("type");
+ }
+
+ return elem;
+}
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+ var l = elems.length,
+ i = 0;
+
+ for ( ; i < l; i++ ) {
+ data_priv.set(
+ elems[ i ], "globalEval", !refElements || data_priv.get( refElements[ i ], "globalEval" )
+ );
+ }
+}
+
+function cloneCopyEvent( src, dest ) {
+ var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
+
+ if ( dest.nodeType !== 1 ) {
+ return;
+ }
+
+ // 1. Copy private data: events, handlers, etc.
+ if ( data_priv.hasData( src ) ) {
+ pdataOld = data_priv.access( src );
+ pdataCur = data_priv.set( dest, pdataOld );
+ events = pdataOld.events;
+
+ if ( events ) {
+ delete pdataCur.handle;
+ pdataCur.events = {};
+
+ for ( type in events ) {
+ for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+ jQuery.event.add( dest, type, events[ type ][ i ] );
+ }
+ }
+ }
+ }
+
+ // 2. Copy user data
+ if ( data_user.hasData( src ) ) {
+ udataOld = data_user.access( src );
+ udataCur = jQuery.extend( {}, udataOld );
+
+ data_user.set( dest, udataCur );
+ }
+}
+
+
+function getAll( context, tag ) {
+ var ret = context.getElementsByTagName ? context.getElementsByTagName( tag || "*" ) :
+ context.querySelectorAll ? context.querySelectorAll( tag || "*" ) :
+ [];
+
+ return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
+ jQuery.merge( [ context ], ret ) :
+ ret;
+}
+
+// Support: IE >= 9
+function fixInput( src, dest ) {
+ var nodeName = dest.nodeName.toLowerCase();
+
+ // Fails to persist the checked state of a cloned checkbox or radio button.
+ if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) {
+ dest.checked = src.checked;
+
+ // Fails to return the selected option to the default selected state when cloning options
+ } else if ( nodeName === "input" || nodeName === "textarea" ) {
+ dest.defaultValue = src.defaultValue;
+ }
+}
+jQuery.fn.extend({
+ wrapAll: function( html ) {
+ var wrap;
+
+ if ( jQuery.isFunction( html ) ) {
+ return this.each(function( i ) {
+ jQuery( this ).wrapAll( html.call(this, i) );
+ });
+ }
+
+ if ( this[ 0 ] ) {
+
+ // The elements to wrap the target around
+ wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
+
+ if ( this[ 0 ].parentNode ) {
+ wrap.insertBefore( this[ 0 ] );
+ }
+
+ wrap.map(function() {
+ var elem = this;
+
+ while ( elem.firstElementChild ) {
+ elem = elem.firstElementChild;
+ }
+
+ return elem;
+ }).append( this );
+ }
+
+ return this;
+ },
+
+ wrapInner: function( html ) {
+ if ( jQuery.isFunction( html ) ) {
+ return this.each(function( i ) {
+ jQuery( this ).wrapInner( html.call(this, i) );
+ });
+ }
+
+ return this.each(function() {
+ var self = jQuery( this ),
+ contents = self.contents();
+
+ if ( contents.length ) {
+ contents.wrapAll( html );
+
+ } else {
+ self.append( html );
+ }
+ });
+ },
+
+ wrap: function( html ) {
+ var isFunction = jQuery.isFunction( html );
+
+ return this.each(function( i ) {
+ jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
+ });
+ },
+
+ unwrap: function() {
+ return this.parent().each(function() {
+ if ( !jQuery.nodeName( this, "body" ) ) {
+ jQuery( this ).replaceWith( this.childNodes );
+ }
+ }).end();
+ }
+});
+var curCSS, iframe,
+ // swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
+ // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+ rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+ rmargin = /^margin/,
+ rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
+ rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
+ rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ),
+ elemdisplay = { BODY: "block" },
+
+ cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+ cssNormalTransform = {
+ letterSpacing: 0,
+ fontWeight: 400
+ },
+
+ cssExpand = [ "Top", "Right", "Bottom", "Left" ],
+ cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
+
+// return a css property mapped to a potentially vendor prefixed property
+function vendorPropName( style, name ) {
+
+ // shortcut for names that are not vendor prefixed
+ if ( name in style ) {
+ return name;
+ }
+
+ // check for vendor prefixed names
+ var capName = name.charAt(0).toUpperCase() + name.slice(1),
+ origName = name,
+ i = cssPrefixes.length;
+
+ while ( i-- ) {
+ name = cssPrefixes[ i ] + capName;
+ if ( name in style ) {
+ return name;
+ }
+ }
+
+ return origName;
+}
+
+function isHidden( elem, el ) {
+ // isHidden might be called from jQuery#filter function;
+ // in that case, element will be second argument
+ elem = el || elem;
+ return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
+}
+
+// NOTE: we've included the "window" in window.getComputedStyle
+// because jsdom on node.js will break without it.
+function getStyles( elem ) {
+ return window.getComputedStyle( elem, null );
+}
+
+function showHide( elements, show ) {
+ var display, elem, hidden,
+ values = [],
+ index = 0,
+ length = elements.length;
+
+ for ( ; index < length; index++ ) {
+ elem = elements[ index ];
+ if ( !elem.style ) {
+ continue;
+ }
+
+ values[ index ] = data_priv.get( elem, "olddisplay" );
+ display = elem.style.display;
+ if ( show ) {
+ // Reset the inline display of this element to learn if it is
+ // being hidden by cascaded rules or not
+ if ( !values[ index ] && display === "none" ) {
+ elem.style.display = "";
+ }
+
+ // Set elements which have been overridden with display: none
+ // in a stylesheet to whatever the default browser style is
+ // for such an element
+ if ( elem.style.display === "" && isHidden( elem ) ) {
+ values[ index ] = data_priv.access( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
+ }
+ } else {
+
+ if ( !values[ index ] ) {
+ hidden = isHidden( elem );
+
+ if ( display && display !== "none" || !hidden ) {
+ data_priv.set( elem, "olddisplay", hidden ? display : jQuery.css(elem, "display") );
+ }
+ }
+ }
+ }
+
+ // Set the display of most of the elements in a second loop
+ // to avoid the constant reflow
+ for ( index = 0; index < length; index++ ) {
+ elem = elements[ index ];
+ if ( !elem.style ) {
+ continue;
+ }
+ if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
+ elem.style.display = show ? values[ index ] || "" : "none";
+ }
+ }
+
+ return elements;
+}
+
+jQuery.fn.extend({
+ css: function( name, value ) {
+ return jQuery.access( this, function( elem, name, value ) {
+ var styles, len,
+ map = {},
+ i = 0;
+
+ if ( jQuery.isArray( name ) ) {
+ styles = getStyles( elem );
+ len = name.length;
+
+ for ( ; i < len; i++ ) {
+ map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+ }
+
+ return map;
+ }
+
+ return value !== undefined ?
+ jQuery.style( elem, name, value ) :
+ jQuery.css( elem, name );
+ }, name, value, arguments.length > 1 );
+ },
+ show: function() {
+ return showHide( this, true );
+ },
+ hide: function() {
+ return showHide( this );
+ },
+ toggle: function( state ) {
+ if ( typeof state === "boolean" ) {
+ return state ? this.show() : this.hide();
+ }
+
+ return this.each(function() {
+ if ( isHidden( this ) ) {
+ jQuery( this ).show();
+ } else {
+ jQuery( this ).hide();
+ }
+ });
+ }
+});
+
+jQuery.extend({
+ // Add in style property hooks for overriding the default
+ // behavior of getting and setting a style property
+ cssHooks: {
+ opacity: {
+ get: function( elem, computed ) {
+ if ( computed ) {
+ // We should always get a number back from opacity
+ var ret = curCSS( elem, "opacity" );
+ return ret === "" ? "1" : ret;
+ }
+ }
+ }
+ },
+
+ // Don't automatically add "px" to these possibly-unitless properties
+ cssNumber: {
+ "columnCount": true,
+ "fillOpacity": true,
+ "fontWeight": true,
+ "lineHeight": true,
+ "opacity": true,
+ "order": true,
+ "orphans": true,
+ "widows": true,
+ "zIndex": true,
+ "zoom": true
+ },
+
+ // Add in properties whose names you wish to fix before
+ // setting or getting the value
+ cssProps: {
+ // normalize float css property
+ "float": "cssFloat"
+ },
+
+ // Get and set the style property on a DOM Node
+ style: function( elem, name, value, extra ) {
+ // Don't set styles on text and comment nodes
+ if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+ return;
+ }
+
+ // Make sure that we're working with the right name
+ var ret, type, hooks,
+ origName = jQuery.camelCase( name ),
+ style = elem.style;
+
+ name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
+
+ // gets hook for the prefixed version
+ // followed by the unprefixed version
+ hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+ // Check if we're setting a value
+ if ( value !== undefined ) {
+ type = typeof value;
+
+ // convert relative number strings (+= or -=) to relative numbers. #7345
+ if ( type === "string" && (ret = rrelNum.exec( value )) ) {
+ value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
+ // Fixes bug #9237
+ type = "number";
+ }
+
+ // Make sure that NaN and null values aren't set. See: #7116
+ if ( value == null || type === "number" && isNaN( value ) ) {
+ return;
+ }
+
+ // If a number was passed in, add 'px' to the (except for certain CSS properties)
+ if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+ value += "px";
+ }
+
+ // Fixes #8908, it can be done more correctly by specifying setters in cssHooks,
+ // but it would mean to define eight (for every problematic property) identical functions
+ if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
+ style[ name ] = "inherit";
+ }
+
+ // If a hook was provided, use that value, otherwise just set the specified value
+ if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
+ style[ name ] = value;
+ }
+
+ } else {
+ // If a hook was provided get the non-computed value from there
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+ return ret;
+ }
+
+ // Otherwise just get the value from the style object
+ return style[ name ];
+ }
+ },
+
+ css: function( elem, name, extra, styles ) {
+ var val, num, hooks,
+ origName = jQuery.camelCase( name );
+
+ // Make sure that we're working with the right name
+ name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
+
+ // gets hook for the prefixed version
+ // followed by the unprefixed version
+ hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+ // If a hook was provided get the computed value from there
+ if ( hooks && "get" in hooks ) {
+ val = hooks.get( elem, true, extra );
+ }
+
+ // Otherwise, if a way to get the computed value exists, use that
+ if ( val === undefined ) {
+ val = curCSS( elem, name, styles );
+ }
+
+ //convert "normal" to computed value
+ if ( val === "normal" && name in cssNormalTransform ) {
+ val = cssNormalTransform[ name ];
+ }
+
+ // Return, converting to number if forced or a qualifier was provided and val looks numeric
+ if ( extra === "" || extra ) {
+ num = parseFloat( val );
+ return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
+ }
+ return val;
+ }
+});
+
+curCSS = function( elem, name, _computed ) {
+ var width, minWidth, maxWidth,
+ computed = _computed || getStyles( elem ),
+
+ // Support: IE9
+ // getPropertyValue is only needed for .css('filter') in IE9, see #12537
+ ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,
+ style = elem.style;
+
+ if ( computed ) {
+
+ if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+ ret = jQuery.style( elem, name );
+ }
+
+ // Support: Safari 5.1
+ // A tribute to the "awesome hack by Dean Edwards"
+ // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
+ // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
+ if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+
+ // Remember the original values
+ width = style.width;
+ minWidth = style.minWidth;
+ maxWidth = style.maxWidth;
+
+ // Put in the new values to get a computed value out
+ style.minWidth = style.maxWidth = style.width = ret;
+ ret = computed.width;
+
+ // Revert the changed values
+ style.width = width;
+ style.minWidth = minWidth;
+ style.maxWidth = maxWidth;
+ }
+ }
+
+ return ret;
+};
+
+
+function setPositiveNumber( elem, value, subtract ) {
+ var matches = rnumsplit.exec( value );
+ return matches ?
+ // Guard against undefined "subtract", e.g., when used as in cssHooks
+ Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
+ value;
+}
+
+function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
+ var i = extra === ( isBorderBox ? "border" : "content" ) ?
+ // If we already have the right measurement, avoid augmentation
+ 4 :
+ // Otherwise initialize for horizontal or vertical properties
+ name === "width" ? 1 : 0,
+
+ val = 0;
+
+ for ( ; i < 4; i += 2 ) {
+ // both box models exclude margin, so add it if we want it
+ if ( extra === "margin" ) {
+ val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
+ }
+
+ if ( isBorderBox ) {
+ // border-box includes padding, so remove it if we want content
+ if ( extra === "content" ) {
+ val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+ }
+
+ // at this point, extra isn't border nor margin, so remove border
+ if ( extra !== "margin" ) {
+ val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+ }
+ } else {
+ // at this point, extra isn't content, so add padding
+ val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+ // at this point, extra isn't content nor padding, so add border
+ if ( extra !== "padding" ) {
+ val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+ }
+ }
+ }
+
+ return val;
+}
+
+function getWidthOrHeight( elem, name, extra ) {
+
+ // Start with offset property, which is equivalent to the border-box value
+ var valueIsBorderBox = true,
+ val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+ styles = getStyles( elem ),
+ isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+
+ // some non-html elements return undefined for offsetWidth, so check for null/undefined
+ // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
+ // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
+ if ( val <= 0 || val == null ) {
+ // Fall back to computed then uncomputed css if necessary
+ val = curCSS( elem, name, styles );
+ if ( val < 0 || val == null ) {
+ val = elem.style[ name ];
+ }
+
+ // Computed unit is not pixels. Stop here and return.
+ if ( rnumnonpx.test(val) ) {
+ return val;
+ }
+
+ // we need the check for style in case a browser which returns unreliable values
+ // for getComputedStyle silently falls back to the reliable elem.style
+ valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );
+
+ // Normalize "", auto, and prepare for extra
+ val = parseFloat( val ) || 0;
+ }
+
+ // use the active box-sizing model to add/subtract irrelevant styles
+ return ( val +
+ augmentWidthOrHeight(
+ elem,
+ name,
+ extra || ( isBorderBox ? "border" : "content" ),
+ valueIsBorderBox,
+ styles
+ )
+ ) + "px";
+}
+
+// Try to determine the default display value of an element
+function css_defaultDisplay( nodeName ) {
+ var doc = document,
+ display = elemdisplay[ nodeName ];
+
+ if ( !display ) {
+ display = actualDisplay( nodeName, doc );
+
+ // If the simple way fails, read from inside an iframe
+ if ( display === "none" || !display ) {
+ // Use the already-created iframe if possible
+ iframe = ( iframe ||
+ jQuery("<iframe frameborder='0' width='0' height='0'/>")
+ .css( "cssText", "display:block !important" )
+ ).appendTo( doc.documentElement );
+
+ // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
+ doc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;
+ doc.write("<!doctype html><html><body>");
+ doc.close();
+
+ display = actualDisplay( nodeName, doc );
+ iframe.detach();
+ }
+
+ // Store the correct default display
+ elemdisplay[ nodeName ] = display;
+ }
+
+ return display;
+}
+
+// Called ONLY from within css_defaultDisplay
+function actualDisplay( name, doc ) {
+ var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
+ display = jQuery.css( elem[0], "display" );
+ elem.remove();
+ return display;
+}
+
+jQuery.each([ "height", "width" ], function( i, name ) {
+ jQuery.cssHooks[ name ] = {
+ get: function( elem, computed, extra ) {
+ if ( computed ) {
+ // certain elements can have dimension info if we invisibly show them
+ // however, it must have a current display style that would benefit from this
+ return elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, "display" ) ) ?
+ jQuery.swap( elem, cssShow, function() {
+ return getWidthOrHeight( elem, name, extra );
+ }) :
+ getWidthOrHeight( elem, name, extra );
+ }
+ },
+
+ set: function( elem, value, extra ) {
+ var styles = extra && getStyles( elem );
+ return setPositiveNumber( elem, value, extra ?
+ augmentWidthOrHeight(
+ elem,
+ name,
+ extra,
+ jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+ styles
+ ) : 0
+ );
+ }
+ };
+});
+
+// These hooks cannot be added until DOM ready because the support test
+// for it is not run until after DOM ready
+jQuery(function() {
+ // Support: Android 2.3
+ if ( !jQuery.support.reliableMarginRight ) {
+ jQuery.cssHooks.marginRight = {
+ get: function( elem, computed ) {
+ if ( computed ) {
+ // Support: Android 2.3
+ // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+ // Work around by temporarily setting element display to inline-block
+ return jQuery.swap( elem, { "display": "inline-block" },
+ curCSS, [ elem, "marginRight" ] );
+ }
+ }
+ };
+ }
+
+ // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+ // getComputedStyle returns percent when specified for top/left/bottom/right
+ // rather than make the css module depend on the offset module, we just check for it here
+ if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {
+ jQuery.each( [ "top", "left" ], function( i, prop ) {
+ jQuery.cssHooks[ prop ] = {
+ get: function( elem, computed ) {
+ if ( computed ) {
+ computed = curCSS( elem, prop );
+ // if curCSS returns percentage, fallback to offset
+ return rnumnonpx.test( computed ) ?
+ jQuery( elem ).position()[ prop ] + "px" :
+ computed;
+ }
+ }
+ };
+ });
+ }
+
+});
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+ jQuery.expr.filters.hidden = function( elem ) {
+ // Support: Opera <= 12.12
+ // Opera reports offsetWidths and offsetHeights less than zero on some elements
+ return elem.offsetWidth <= 0 && elem.offsetHeight <= 0;
+ };
+
+ jQuery.expr.filters.visible = function( elem ) {
+ return !jQuery.expr.filters.hidden( elem );
+ };
+}
+
+// These hooks are used by animate to expand properties
+jQuery.each({
+ margin: "",
+ padding: "",
+ border: "Width"
+}, function( prefix, suffix ) {
+ jQuery.cssHooks[ prefix + suffix ] = {
+ expand: function( value ) {
+ var i = 0,
+ expanded = {},
+
+ // assumes a single number if not a string
+ parts = typeof value === "string" ? value.split(" ") : [ value ];
+
+ for ( ; i < 4; i++ ) {
+ expanded[ prefix + cssExpand[ i ] + suffix ] =
+ parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+ }
+
+ return expanded;
+ }
+ };
+
+ if ( !rmargin.test( prefix ) ) {
+ jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+ }
+});
+var r20 = /%20/g,
+ rbracket = /\[\]$/,
+ rCRLF = /\r?\n/g,
+ rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+ rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+jQuery.fn.extend({
+ serialize: function() {
+ return jQuery.param( this.serializeArray() );
+ },
+ serializeArray: function() {
+ return this.map(function(){
+ // Can add propHook for "elements" to filter or add form elements
+ var elements = jQuery.prop( this, "elements" );
+ return elements ? jQuery.makeArray( elements ) : this;
+ })
+ .filter(function(){
+ var type = this.type;
+ // Use .is(":disabled") so that fieldset[disabled] works
+ return this.name && !jQuery( this ).is( ":disabled" ) &&
+ rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+ ( this.checked || !manipulation_rcheckableType.test( type ) );
+ })
+ .map(function( i, elem ){
+ var val = jQuery( this ).val();
+
+ return val == null ?
+ null :
+ jQuery.isArray( val ) ?
+ jQuery.map( val, function( val ){
+ return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+ }) :
+ { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+ }).get();
+ }
+});
+
+//Serialize an array of form elements or a set of
+//key/values into a query string
+jQuery.param = function( a, traditional ) {
+ var prefix,
+ s = [],
+ add = function( key, value ) {
+ // If value is a function, invoke it and return its value
+ value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
+ s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+ };
+
+ // Set traditional to true for jQuery <= 1.3.2 behavior.
+ if ( traditional === undefined ) {
+ traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
+ }
+
+ // If an array was passed in, assume that it is an array of form elements.
+ if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+ // Serialize the form elements
+ jQuery.each( a, function() {
+ add( this.name, this.value );
+ });
+
+ } else {
+ // If traditional, encode the "old" way (the way 1.3.2 or older
+ // did it), otherwise encode params recursively.
+ for ( prefix in a ) {
+ buildParams( prefix, a[ prefix ], traditional, add );
+ }
+ }
+
+ // Return the resulting serialization
+ return s.join( "&" ).replace( r20, "+" );
+};
+
+function buildParams( prefix, obj, traditional, add ) {
+ var name;
+
+ if ( jQuery.isArray( obj ) ) {
+ // Serialize array item.
+ jQuery.each( obj, function( i, v ) {
+ if ( traditional || rbracket.test( prefix ) ) {
+ // Treat each array item as a scalar.
+ add( prefix, v );
+
+ } else {
+ // Item is non-scalar (array or object), encode its numeric index.
+ buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
+ }
+ });
+
+ } else if ( !traditional && jQuery.type( obj ) === "object" ) {
+ // Serialize object item.
+ for ( name in obj ) {
+ buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+ }
+
+ } else {
+ // Serialize scalar item.
+ add( prefix, obj );
+ }
+}
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+ "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+ "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
+
+ // Handle event binding
+ jQuery.fn[ name ] = function( data, fn ) {
+ return arguments.length > 0 ?
+ this.on( name, null, data, fn ) :
+ this.trigger( name );
+ };
+});
+
+jQuery.fn.extend({
+ hover: function( fnOver, fnOut ) {
+ return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+ },
+
+ bind: function( types, data, fn ) {
+ return this.on( types, null, data, fn );
+ },
+ unbind: function( types, fn ) {
+ return this.off( types, null, fn );
+ },
+
+ delegate: function( selector, types, data, fn ) {
+ return this.on( types, selector, data, fn );
+ },
+ undelegate: function( selector, types, fn ) {
+ // ( namespace ) or ( selector, types [, fn] )
+ return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
+ }
+});
+var
+ // Document location
+ ajaxLocParts,
+ ajaxLocation,
+
+ ajax_nonce = jQuery.now(),
+
+ ajax_rquery = /\?/,
+ rhash = /#.*$/,
+ rts = /([?&])_=[^&]*/,
+ rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
+ // #7653, #8125, #8152: local protocol detection
+ rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+ rnoContent = /^(?:GET|HEAD)$/,
+ rprotocol = /^\/\//,
+ rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,
+
+ // Keep a copy of the old load method
+ _load = jQuery.fn.load,
+
+ /* Prefilters
+ * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+ * 2) These are called:
+ * - BEFORE asking for a transport
+ * - AFTER param serialization (s.data is a string if s.processData is true)
+ * 3) key is the dataType
+ * 4) the catchall symbol "*" can be used
+ * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+ */
+ prefilters = {},
+
+ /* Transports bindings
+ * 1) key is the dataType
+ * 2) the catchall symbol "*" can be used
+ * 3) selection will start with transport dataType and THEN go to "*" if needed
+ */
+ transports = {},
+
+ // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+ allTypes = "*/".concat("*");
+
+// #8138, IE may throw an exception when accessing
+// a field from window.location if document.domain has been set
+try {
+ ajaxLocation = location.href;
+} catch( e ) {
+ // Use the href attribute of an A element
+ // since IE will modify it given document.location
+ ajaxLocation = document.createElement( "a" );
+ ajaxLocation.href = "";
+ ajaxLocation = ajaxLocation.href;
+}
+
+// Segment location into parts
+ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+ // dataTypeExpression is optional and defaults to "*"
+ return function( dataTypeExpression, func ) {
+
+ if ( typeof dataTypeExpression !== "string" ) {
+ func = dataTypeExpression;
+ dataTypeExpression = "*";
+ }
+
+ var dataType,
+ i = 0,
+ dataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || [];
+
+ if ( jQuery.isFunction( func ) ) {
+ // For each dataType in the dataTypeExpression
+ while ( (dataType = dataTypes[i++]) ) {
+ // Prepend if requested
+ if ( dataType[0] === "+" ) {
+ dataType = dataType.slice( 1 ) || "*";
+ (structure[ dataType ] = structure[ dataType ] || []).unshift( func );
+
+ // Otherwise append
+ } else {
+ (structure[ dataType ] = structure[ dataType ] || []).push( func );
+ }
+ }
+ }
+ };
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+ var inspected = {},
+ seekingTransport = ( structure === transports );
+
+ function inspect( dataType ) {
+ var selected;
+ inspected[ dataType ] = true;
+ jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+ var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+ if( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+ options.dataTypes.unshift( dataTypeOrTransport );
+ inspect( dataTypeOrTransport );
+ return false;
+ } else if ( seekingTransport ) {
+ return !( selected = dataTypeOrTransport );
+ }
+ });
+ return selected;
+ }
+
+ return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+ var key, deep,
+ flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+ for ( key in src ) {
+ if ( src[ key ] !== undefined ) {
+ ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
+ }
+ }
+ if ( deep ) {
+ jQuery.extend( true, target, deep );
+ }
+
+ return target;
+}
+
+jQuery.fn.load = function( url, params, callback ) {
+ if ( typeof url !== "string" && _load ) {
+ return _load.apply( this, arguments );
+ }
+
+ var selector, type, response,
+ self = this,
+ off = url.indexOf(" ");
+
+ if ( off >= 0 ) {
+ selector = url.slice( off );
+ url = url.slice( 0, off );
+ }
+
+ // If it's a function
+ if ( jQuery.isFunction( params ) ) {
+
+ // We assume that it's the callback
+ callback = params;
+ params = undefined;
+
+ // Otherwise, build a param string
+ } else if ( params && typeof params === "object" ) {
+ type = "POST";
+ }
+
+ // If we have elements to modify, make the request
+ if ( self.length > 0 ) {
+ jQuery.ajax({
+ url: url,
+
+ // if "type" variable is undefined, then "GET" method will be used
+ type: type,
+ dataType: "html",
+ data: params
+ }).done(function( responseText ) {
+
+ // Save response for use in complete callback
+ response = arguments;
+
+ self.html( selector ?
+
+ // If a selector was specified, locate the right elements in a dummy div
+ // Exclude scripts to avoid IE 'Permission Denied' errors
+ jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
+
+ // Otherwise use the full result
+ responseText );
+
+ }).complete( callback && function( jqXHR, status ) {
+ self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
+ });
+ }
+
+ return this;
+};
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ){
+ jQuery.fn[ type ] = function( fn ){
+ return this.on( type, fn );
+ };
+});
+
+jQuery.extend({
+
+ // Counter for holding the number of active queries
+ active: 0,
+
+ // Last-Modified header cache for next request
+ lastModified: {},
+ etag: {},
+
+ ajaxSettings: {
+ url: ajaxLocation,
+ type: "GET",
+ isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+ global: true,
+ processData: true,
+ async: true,
+ contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+ /*
+ timeout: 0,
+ data: null,
+ dataType: null,
+ username: null,
+ password: null,
+ cache: null,
+ throws: false,
+ traditional: false,
+ headers: {},
+ */
+
+ accepts: {
+ "*": allTypes,
+ text: "text/plain",
+ html: "text/html",
+ xml: "application/xml, text/xml",
+ json: "application/json, text/javascript"
+ },
+
+ contents: {
+ xml: /xml/,
+ html: /html/,
+ json: /json/
+ },
+
+ responseFields: {
+ xml: "responseXML",
+ text: "responseText",
+ json: "responseJSON"
+ },
+
+ // Data converters
+ // Keys separate source (or catchall "*") and destination types with a single space
+ converters: {
+
+ // Convert anything to text
+ "* text": String,
+
+ // Text to html (true = no transformation)
+ "text html": true,
+
+ // Evaluate text as a json expression
+ "text json": jQuery.parseJSON,
+
+ // Parse text as xml
+ "text xml": jQuery.parseXML
+ },
+
+ // For options that shouldn't be deep extended:
+ // you can add your own custom options here if
+ // and when you create one that shouldn't be
+ // deep extended (see ajaxExtend)
+ flatOptions: {
+ url: true,
+ context: true
+ }
+ },
+
+ // Creates a full fledged settings object into target
+ // with both ajaxSettings and settings fields.
+ // If target is omitted, writes into ajaxSettings.
+ ajaxSetup: function( target, settings ) {
+ return settings ?
+
+ // Building a settings object
+ ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+ // Extending ajaxSettings
+ ajaxExtend( jQuery.ajaxSettings, target );
+ },
+
+ ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+ ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+ // Main method
+ ajax: function( url, options ) {
+
+ // If url is an object, simulate pre-1.5 signature
+ if ( typeof url === "object" ) {
+ options = url;
+ url = undefined;
+ }
+
+ // Force options to be an object
+ options = options || {};
+
+ var transport,
+ // URL without anti-cache param
+ cacheURL,
+ // Response headers
+ responseHeadersString,
+ responseHeaders,
+ // timeout handle
+ timeoutTimer,
+ // Cross-domain detection vars
+ parts,
+ // To know if global events are to be dispatched
+ fireGlobals,
+ // Loop variable
+ i,
+ // Create the final options object
+ s = jQuery.ajaxSetup( {}, options ),
+ // Callbacks context
+ callbackContext = s.context || s,
+ // Context for global events is callbackContext if it is a DOM node or jQuery collection
+ globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
+ jQuery( callbackContext ) :
+ jQuery.event,
+ // Deferreds
+ deferred = jQuery.Deferred(),
+ completeDeferred = jQuery.Callbacks("once memory"),
+ // Status-dependent callbacks
+ statusCode = s.statusCode || {},
+ // Headers (they are sent all at once)
+ requestHeaders = {},
+ requestHeadersNames = {},
+ // The jqXHR state
+ state = 0,
+ // Default abort message
+ strAbort = "canceled",
+ // Fake xhr
+ jqXHR = {
+ readyState: 0,
+
+ // Builds headers hashtable if needed
+ getResponseHeader: function( key ) {
+ var match;
+ if ( state === 2 ) {
+ if ( !responseHeaders ) {
+ responseHeaders = {};
+ while ( (match = rheaders.exec( responseHeadersString )) ) {
+ responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+ }
+ }
+ match = responseHeaders[ key.toLowerCase() ];
+ }
+ return match == null ? null : match;
+ },
+
+ // Raw string
+ getAllResponseHeaders: function() {
+ return state === 2 ? responseHeadersString : null;
+ },
+
+ // Caches the header
+ setRequestHeader: function( name, value ) {
+ var lname = name.toLowerCase();
+ if ( !state ) {
+ name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+ requestHeaders[ name ] = value;
+ }
+ return this;
+ },
+
+ // Overrides response content-type header
+ overrideMimeType: function( type ) {
+ if ( !state ) {
+ s.mimeType = type;
+ }
+ return this;
+ },
+
+ // Status-dependent callbacks
+ statusCode: function( map ) {
+ var code;
+ if ( map ) {
+ if ( state < 2 ) {
+ for ( code in map ) {
+ // Lazy-add the new callback in a way that preserves old ones
+ statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+ }
+ } else {
+ // Execute the appropriate callbacks
+ jqXHR.always( map[ jqXHR.status ] );
+ }
+ }
+ return this;
+ },
+
+ // Cancel the request
+ abort: function( statusText ) {
+ var finalText = statusText || strAbort;
+ if ( transport ) {
+ transport.abort( finalText );
+ }
+ done( 0, finalText );
+ return this;
+ }
+ };
+
+ // Attach deferreds
+ deferred.promise( jqXHR ).complete = completeDeferred.add;
+ jqXHR.success = jqXHR.done;
+ jqXHR.error = jqXHR.fail;
+
+ // Remove hash character (#7531: and string promotion)
+ // Add protocol if not provided (prefilters might expect it)
+ // Handle falsy url in the settings object (#10093: consistency with old signature)
+ // We also use the url parameter if available
+ s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" )
+ .replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+
+ // Alias method option to type as per ticket #12004
+ s.type = options.method || options.type || s.method || s.type;
+
+ // Extract dataTypes list
+ s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( core_rnotwhite ) || [""];
+
+ // A cross-domain request is in order when we have a protocol:host:port mismatch
+ if ( s.crossDomain == null ) {
+ parts = rurl.exec( s.url.toLowerCase() );
+ s.crossDomain = !!( parts &&
+ ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
+ ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
+ ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
+ );
+ }
+
+ // Convert data if not already a string
+ if ( s.data && s.processData && typeof s.data !== "string" ) {
+ s.data = jQuery.param( s.data, s.traditional );
+ }
+
+ // Apply prefilters
+ inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+ // If request was aborted inside a prefilter, stop there
+ if ( state === 2 ) {
+ return jqXHR;
+ }
+
+ // We can fire global events as of now if asked to
+ fireGlobals = s.global;
+
+ // Watch for a new set of requests
+ if ( fireGlobals && jQuery.active++ === 0 ) {
+ jQuery.event.trigger("ajaxStart");
+ }
+
+ // Uppercase the type
+ s.type = s.type.toUpperCase();
+
+ // Determine if request has content
+ s.hasContent = !rnoContent.test( s.type );
+
+ // Save the URL in case we're toying with the If-Modified-Since
+ // and/or If-None-Match header later on
+ cacheURL = s.url;
+
+ // More options handling for requests with no content
+ if ( !s.hasContent ) {
+
+ // If data is available, append data to url
+ if ( s.data ) {
+ cacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
+ // #9682: remove data so that it's not used in an eventual retry
+ delete s.data;
+ }
+
+ // Add anti-cache in url if needed
+ if ( s.cache === false ) {
+ s.url = rts.test( cacheURL ) ?
+
+ // If there is already a '_' parameter, set its value
+ cacheURL.replace( rts, "$1_=" + ajax_nonce++ ) :
+
+ // Otherwise add one to the end
+ cacheURL + ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ajax_nonce++;
+ }
+ }
+
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if ( s.ifModified ) {
+ if ( jQuery.lastModified[ cacheURL ] ) {
+ jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+ }
+ if ( jQuery.etag[ cacheURL ] ) {
+ jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+ }
+ }
+
+ // Set the correct header, if data is being sent
+ if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+ jqXHR.setRequestHeader( "Content-Type", s.contentType );
+ }
+
+ // Set the Accepts header for the server, depending on the dataType
+ jqXHR.setRequestHeader(
+ "Accept",
+ s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+ s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+ s.accepts[ "*" ]
+ );
+
+ // Check for headers option
+ for ( i in s.headers ) {
+ jqXHR.setRequestHeader( i, s.headers[ i ] );
+ }
+
+ // Allow custom headers/mimetypes and early abort
+ if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+ // Abort if not done already and return
+ return jqXHR.abort();
+ }
+
+ // aborting is no longer a cancellation
+ strAbort = "abort";
+
+ // Install callbacks on deferreds
+ for ( i in { success: 1, error: 1, complete: 1 } ) {
+ jqXHR[ i ]( s[ i ] );
+ }
+
+ // Get transport
+ transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+ // If no transport, we auto-abort
+ if ( !transport ) {
+ done( -1, "No Transport" );
+ } else {
+ jqXHR.readyState = 1;
+
+ // Send global event
+ if ( fireGlobals ) {
+ globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+ }
+ // Timeout
+ if ( s.async && s.timeout > 0 ) {
+ timeoutTimer = setTimeout(function() {
+ jqXHR.abort("timeout");
+ }, s.timeout );
+ }
+
+ try {
+ state = 1;
+ transport.send( requestHeaders, done );
+ } catch ( e ) {
+ // Propagate exception as error if not done
+ if ( state < 2 ) {
+ done( -1, e );
+ // Simply rethrow otherwise
+ } else {
+ throw e;
+ }
+ }
+ }
+
+ // Callback for when everything is done
+ function done( status, nativeStatusText, responses, headers ) {
+ var isSuccess, success, error, response, modified,
+ statusText = nativeStatusText;
+
+ // Called once
+ if ( state === 2 ) {
+ return;
+ }
+
+ // State is "done" now
+ state = 2;
+
+ // Clear timeout if it exists
+ if ( timeoutTimer ) {
+ clearTimeout( timeoutTimer );
+ }
+
+ // Dereference transport for early garbage collection
+ // (no matter how long the jqXHR object will be used)
+ transport = undefined;
+
+ // Cache response headers
+ responseHeadersString = headers || "";
+
+ // Set readyState
+ jqXHR.readyState = status > 0 ? 4 : 0;
+
+ // Determine if successful
+ isSuccess = status >= 200 && status < 300 || status === 304;
+
+ // Get response data
+ if ( responses ) {
+ response = ajaxHandleResponses( s, jqXHR, responses );
+ }
+
+ // Convert no matter what (that way responseXXX fields are always set)
+ response = ajaxConvert( s, response, jqXHR, isSuccess );
+
+ // If successful, handle type chaining
+ if ( isSuccess ) {
+
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if ( s.ifModified ) {
+ modified = jqXHR.getResponseHeader("Last-Modified");
+ if ( modified ) {
+ jQuery.lastModified[ cacheURL ] = modified;
+ }
+ modified = jqXHR.getResponseHeader("etag");
+ if ( modified ) {
+ jQuery.etag[ cacheURL ] = modified;
+ }
+ }
+
+ // if no content
+ if ( status === 204 || s.type === "HEAD" ) {
+ statusText = "nocontent";
+
+ // if not modified
+ } else if ( status === 304 ) {
+ statusText = "notmodified";
+
+ // If we have data, let's convert it
+ } else {
+ statusText = response.state;
+ success = response.data;
+ error = response.error;
+ isSuccess = !error;
+ }
+ } else {
+ // We extract error from statusText
+ // then normalize statusText and status for non-aborts
+ error = statusText;
+ if ( status || !statusText ) {
+ statusText = "error";
+ if ( status < 0 ) {
+ status = 0;
+ }
+ }
+ }
+
+ // Set data for the fake xhr object
+ jqXHR.status = status;
+ jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+ // Success/Error
+ if ( isSuccess ) {
+ deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+ } else {
+ deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+ }
+
+ // Status-dependent callbacks
+ jqXHR.statusCode( statusCode );
+ statusCode = undefined;
+
+ if ( fireGlobals ) {
+ globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+ [ jqXHR, s, isSuccess ? success : error ] );
+ }
+
+ // Complete
+ completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+ if ( fireGlobals ) {
+ globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+ // Handle the global AJAX counter
+ if ( !( --jQuery.active ) ) {
+ jQuery.event.trigger("ajaxStop");
+ }
+ }
+ }
+
+ return jqXHR;
+ },
+
+ getJSON: function( url, data, callback ) {
+ return jQuery.get( url, data, callback, "json" );
+ },
+
+ getScript: function( url, callback ) {
+ return jQuery.get( url, undefined, callback, "script" );
+ }
+});
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+ jQuery[ method ] = function( url, data, callback, type ) {
+ // shift arguments if data argument was omitted
+ if ( jQuery.isFunction( data ) ) {
+ type = type || callback;
+ callback = data;
+ data = undefined;
+ }
+
+ return jQuery.ajax({
+ url: url,
+ type: method,
+ dataType: type,
+ data: data,
+ success: callback
+ });
+ };
+});
+
+/* Handles responses to an ajax request:
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+ var ct, type, finalDataType, firstDataType,
+ contents = s.contents,
+ dataTypes = s.dataTypes;
+
+ // Remove auto dataType and get content-type in the process
+ while( dataTypes[ 0 ] === "*" ) {
+ dataTypes.shift();
+ if ( ct === undefined ) {
+ ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
+ }
+ }
+
+ // Check if we're dealing with a known content-type
+ if ( ct ) {
+ for ( type in contents ) {
+ if ( contents[ type ] && contents[ type ].test( ct ) ) {
+ dataTypes.unshift( type );
+ break;
+ }
+ }
+ }
+
+ // Check to see if we have a response for the expected dataType
+ if ( dataTypes[ 0 ] in responses ) {
+ finalDataType = dataTypes[ 0 ];
+ } else {
+ // Try convertible dataTypes
+ for ( type in responses ) {
+ if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+ finalDataType = type;
+ break;
+ }
+ if ( !firstDataType ) {
+ firstDataType = type;
+ }
+ }
+ // Or just use first one
+ finalDataType = finalDataType || firstDataType;
+ }
+
+ // If we found a dataType
+ // We add the dataType to the list if needed
+ // and return the corresponding response
+ if ( finalDataType ) {
+ if ( finalDataType !== dataTypes[ 0 ] ) {
+ dataTypes.unshift( finalDataType );
+ }
+ return responses[ finalDataType ];
+ }
+}
+
+/* Chain conversions given the request and the original response
+ * Also sets the responseXXX fields on the jqXHR instance
+ */
+function ajaxConvert( s, response, jqXHR, isSuccess ) {
+ var conv2, current, conv, tmp, prev,
+ converters = {},
+ // Work with a copy of dataTypes in case we need to modify it for conversion
+ dataTypes = s.dataTypes.slice();
+
+ // Create converters map with lowercased keys
+ if ( dataTypes[ 1 ] ) {
+ for ( conv in s.converters ) {
+ converters[ conv.toLowerCase() ] = s.converters[ conv ];
+ }
+ }
+
+ current = dataTypes.shift();
+
+ // Convert to each sequential dataType
+ while ( current ) {
+
+ if ( s.responseFields[ current ] ) {
+ jqXHR[ s.responseFields[ current ] ] = response;
+ }
+
+ // Apply the dataFilter if provided
+ if ( !prev && isSuccess && s.dataFilter ) {
+ response = s.dataFilter( response, s.dataType );
+ }
+
+ prev = current;
+ current = dataTypes.shift();
+
+ if ( current ) {
+
+ // There's only work to do if current dataType is non-auto
+ if ( current === "*" ) {
+
+ current = prev;
+
+ // Convert response if prev dataType is non-auto and differs from current
+ } else if ( prev !== "*" && prev !== current ) {
+
+ // Seek a direct converter
+ conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+ // If none found, seek a pair
+ if ( !conv ) {
+ for ( conv2 in converters ) {
+
+ // If conv2 outputs current
+ tmp = conv2.split( " " );
+ if ( tmp[ 1 ] === current ) {
+
+ // If prev can be converted to accepted input
+ conv = converters[ prev + " " + tmp[ 0 ] ] ||
+ converters[ "* " + tmp[ 0 ] ];
+ if ( conv ) {
+ // Condense equivalence converters
+ if ( conv === true ) {
+ conv = converters[ conv2 ];
+
+ // Otherwise, insert the intermediate dataType
+ } else if ( converters[ conv2 ] !== true ) {
+ current = tmp[ 0 ];
+ dataTypes.unshift( tmp[ 1 ] );
+ }
+ break;
+ }
+ }
+ }
+ }
+
+ // Apply converter (if not an equivalence)
+ if ( conv !== true ) {
+
+ // Unless errors are allowed to bubble, catch and return them
+ if ( conv && s[ "throws" ] ) {
+ response = conv( response );
+ } else {
+ try {
+ response = conv( response );
+ } catch ( e ) {
+ return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return { state: "success", data: response };
+}
+// Install script dataType
+jQuery.ajaxSetup({
+ accepts: {
+ script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+ },
+ contents: {
+ script: /(?:java|ecma)script/
+ },
+ converters: {
+ "text script": function( text ) {
+ jQuery.globalEval( text );
+ return text;
+ }
+ }
+});
+
+// Handle cache's special case and crossDomain
+jQuery.ajaxPrefilter( "script", function( s ) {
+ if ( s.cache === undefined ) {
+ s.cache = false;
+ }
+ if ( s.crossDomain ) {
+ s.type = "GET";
+ }
+});
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function( s ) {
+ // This transport only deals with cross domain requests
+ if ( s.crossDomain ) {
+ var script, callback;
+ return {
+ send: function( _, complete ) {
+ script = jQuery("<script>").prop({
+ async: true,
+ charset: s.scriptCharset,
+ src: s.url
+ }).on(
+ "load error",
+ callback = function( evt ) {
+ script.remove();
+ callback = null;
+ if ( evt ) {
+ complete( evt.type === "error" ? 404 : 200, evt.type );
+ }
+ }
+ );
+ document.head.appendChild( script[ 0 ] );
+ },
+ abort: function() {
+ if ( callback ) {
+ callback();
+ }
+ }
+ };
+ }
+});
+var oldCallbacks = [],
+ rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup({
+ jsonp: "callback",
+ jsonpCallback: function() {
+ var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) );
+ this[ callback ] = true;
+ return callback;
+ }
+});
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+ var callbackName, overwritten, responseContainer,
+ jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+ "url" :
+ typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
+ );
+
+ // Handle iff the expected data type is "jsonp" or we have a parameter to set
+ if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+ // Get callback name, remembering preexisting value associated with it
+ callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
+ s.jsonpCallback() :
+ s.jsonpCallback;
+
+ // Insert callback into url or form data
+ if ( jsonProp ) {
+ s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+ } else if ( s.jsonp !== false ) {
+ s.url += ( ajax_rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+ }
+
+ // Use data converter to retrieve json after script execution
+ s.converters["script json"] = function() {
+ if ( !responseContainer ) {
+ jQuery.error( callbackName + " was not called" );
+ }
+ return responseContainer[ 0 ];
+ };
+
+ // force json dataType
+ s.dataTypes[ 0 ] = "json";
+
+ // Install callback
+ overwritten = window[ callbackName ];
+ window[ callbackName ] = function() {
+ responseContainer = arguments;
+ };
+
+ // Clean-up function (fires after converters)
+ jqXHR.always(function() {
+ // Restore preexisting value
+ window[ callbackName ] = overwritten;
+
+ // Save back as free
+ if ( s[ callbackName ] ) {
+ // make sure that re-using the options doesn't screw things around
+ s.jsonpCallback = originalSettings.jsonpCallback;
+
+ // save the callback name for future use
+ oldCallbacks.push( callbackName );
+ }
+
+ // Call if it was a function and we have a response
+ if ( responseContainer && jQuery.isFunction( overwritten ) ) {
+ overwritten( responseContainer[ 0 ] );
+ }
+
+ responseContainer = overwritten = undefined;
+ });
+
+ // Delegate to script
+ return "script";
+ }
+});
+jQuery.ajaxSettings.xhr = function() {
+ try {
+ return new XMLHttpRequest();
+ } catch( e ) {}
+};
+
+var xhrSupported = jQuery.ajaxSettings.xhr(),
+ xhrSuccessStatus = {
+ // file protocol always yields status code 0, assume 200
+ 0: 200,
+ // Support: IE9
+ // #1450: sometimes IE returns 1223 when it should be 204
+ 1223: 204
+ },
+ // Support: IE9
+ // We need to keep track of outbound xhr and abort them manually
+ // because IE is not smart enough to do it all by itself
+ xhrId = 0,
+ xhrCallbacks = {};
+
+if ( window.ActiveXObject ) {
+ jQuery( window ).on( "unload", function() {
+ for( var key in xhrCallbacks ) {
+ xhrCallbacks[ key ]();
+ }
+ xhrCallbacks = undefined;
+ });
+}
+
+jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+jQuery.support.ajax = xhrSupported = !!xhrSupported;
+
+jQuery.ajaxTransport(function( options ) {
+ var callback;
+ // Cross domain only allowed if supported through XMLHttpRequest
+ if ( jQuery.support.cors || xhrSupported && !options.crossDomain ) {
+ return {
+ send: function( headers, complete ) {
+ var i, id,
+ xhr = options.xhr();
+ xhr.open( options.type, options.url, options.async, options.username, options.password );
+ // Apply custom fields if provided
+ if ( options.xhrFields ) {
+ for ( i in options.xhrFields ) {
+ xhr[ i ] = options.xhrFields[ i ];
+ }
+ }
+ // Override mime type if needed
+ if ( options.mimeType && xhr.overrideMimeType ) {
+ xhr.overrideMimeType( options.mimeType );
+ }
+ // X-Requested-With header
+ // For cross-domain requests, seeing as conditions for a preflight are
+ // akin to a jigsaw puzzle, we simply never set it to be sure.
+ // (it can always be set on a per-request basis or even using ajaxSetup)
+ // For same-domain requests, won't change header if already provided.
+ if ( !options.crossDomain && !headers["X-Requested-With"] ) {
+ headers["X-Requested-With"] = "XMLHttpRequest";
+ }
+ // Set headers
+ for ( i in headers ) {
+ xhr.setRequestHeader( i, headers[ i ] );
+ }
+ // Callback
+ callback = function( type ) {
+ return function() {
+ if ( callback ) {
+ delete xhrCallbacks[ id ];
+ callback = xhr.onload = xhr.onerror = null;
+ if ( type === "abort" ) {
+ xhr.abort();
+ } else if ( type === "error" ) {
+ complete(
+ // file protocol always yields status 0, assume 404
+ xhr.status || 404,
+ xhr.statusText
+ );
+ } else {
+ complete(
+ xhrSuccessStatus[ xhr.status ] || xhr.status,
+ xhr.statusText,
+ // Support: IE9
+ // #11426: When requesting binary data, IE9 will throw an exception
+ // on any attempt to access responseText
+ typeof xhr.responseText === "string" ? {
+ text: xhr.responseText
+ } : undefined,
+ xhr.getAllResponseHeaders()
+ );
+ }
+ }
+ };
+ };
+ // Listen to events
+ xhr.onload = callback();
+ xhr.onerror = callback("error");
+ // Create the abort callback
+ callback = xhrCallbacks[( id = xhrId++ )] = callback("abort");
+ // Do send the request
+ // This may raise an exception which is actually
+ // handled in jQuery.ajax (so no try/catch here)
+ xhr.send( options.hasContent && options.data || null );
+ },
+ abort: function() {
+ if ( callback ) {
+ callback();
+ }
+ }
+ };
+ }
+});
+var fxNow, timerId,
+ rfxtypes = /^(?:toggle|show|hide)$/,
+ rfxnum = new RegExp( "^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),
+ rrun = /queueHooks$/,
+ animationPrefilters = [ defaultPrefilter ],
+ tweeners = {
+ "*": [function( prop, value ) {
+ var tween = this.createTween( prop, value ),
+ target = tween.cur(),
+ parts = rfxnum.exec( value ),
+ unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
+
+ // Starting value computation is required for potential unit mismatches
+ start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&
+ rfxnum.exec( jQuery.css( tween.elem, prop ) ),
+ scale = 1,
+ maxIterations = 20;
+
+ if ( start && start[ 3 ] !== unit ) {
+ // Trust units reported by jQuery.css
+ unit = unit || start[ 3 ];
+
+ // Make sure we update the tween properties later on
+ parts = parts || [];
+
+ // Iteratively approximate from a nonzero starting point
+ start = +target || 1;
+
+ do {
+ // If previous iteration zeroed out, double until we get *something*
+ // Use a string for doubling factor so we don't accidentally see scale as unchanged below
+ scale = scale || ".5";
+
+ // Adjust and apply
+ start = start / scale;
+ jQuery.style( tween.elem, prop, start + unit );
+
+ // Update scale, tolerating zero or NaN from tween.cur()
+ // And breaking the loop if scale is unchanged or perfect, or if we've just had enough
+ } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
+ }
+
+ // Update tween properties
+ if ( parts ) {
+ start = tween.start = +start || +target || 0;
+ tween.unit = unit;
+ // If a +=/-= token was provided, we're doing a relative animation
+ tween.end = parts[ 1 ] ?
+ start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
+ +parts[ 2 ];
+ }
+
+ return tween;
+ }]
+ };
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+ setTimeout(function() {
+ fxNow = undefined;
+ });
+ return ( fxNow = jQuery.now() );
+}
+
+function createTween( value, prop, animation ) {
+ var tween,
+ collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
+ index = 0,
+ length = collection.length;
+ for ( ; index < length; index++ ) {
+ if ( (tween = collection[ index ].call( animation, prop, value )) ) {
+
+ // we're done with this property
+ return tween;
+ }
+ }
+}
+
+function Animation( elem, properties, options ) {
+ var result,
+ stopped,
+ index = 0,
+ length = animationPrefilters.length,
+ deferred = jQuery.Deferred().always( function() {
+ // don't match elem in the :animated selector
+ delete tick.elem;
+ }),
+ tick = function() {
+ if ( stopped ) {
+ return false;
+ }
+ var currentTime = fxNow || createFxNow(),
+ remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+ // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
+ temp = remaining / animation.duration || 0,
+ percent = 1 - temp,
+ index = 0,
+ length = animation.tweens.length;
+
+ for ( ; index < length ; index++ ) {
+ animation.tweens[ index ].run( percent );
+ }
+
+ deferred.notifyWith( elem, [ animation, percent, remaining ]);
+
+ if ( percent < 1 && length ) {
+ return remaining;
+ } else {
+ deferred.resolveWith( elem, [ animation ] );
+ return false;
+ }
+ },
+ animation = deferred.promise({
+ elem: elem,
+ props: jQuery.extend( {}, properties ),
+ opts: jQuery.extend( true, { specialEasing: {} }, options ),
+ originalProperties: properties,
+ originalOptions: options,
+ startTime: fxNow || createFxNow(),
+ duration: options.duration,
+ tweens: [],
+ createTween: function( prop, end ) {
+ var tween = jQuery.Tween( elem, animation.opts, prop, end,
+ animation.opts.specialEasing[ prop ] || animation.opts.easing );
+ animation.tweens.push( tween );
+ return tween;
+ },
+ stop: function( gotoEnd ) {
+ var index = 0,
+ // if we are going to the end, we want to run all the tweens
+ // otherwise we skip this part
+ length = gotoEnd ? animation.tweens.length : 0;
+ if ( stopped ) {
+ return this;
+ }
+ stopped = true;
+ for ( ; index < length ; index++ ) {
+ animation.tweens[ index ].run( 1 );
+ }
+
+ // resolve when we played the last frame
+ // otherwise, reject
+ if ( gotoEnd ) {
+ deferred.resolveWith( elem, [ animation, gotoEnd ] );
+ } else {
+ deferred.rejectWith( elem, [ animation, gotoEnd ] );
+ }
+ return this;
+ }
+ }),
+ props = animation.props;
+
+ propFilter( props, animation.opts.specialEasing );
+
+ for ( ; index < length ; index++ ) {
+ result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
+ if ( result ) {
+ return result;
+ }
+ }
+
+ jQuery.map( props, createTween, animation );
+
+ if ( jQuery.isFunction( animation.opts.start ) ) {
+ animation.opts.start.call( elem, animation );
+ }
+
+ jQuery.fx.timer(
+ jQuery.extend( tick, {
+ elem: elem,
+ anim: animation,
+ queue: animation.opts.queue
+ })
+ );
+
+ // attach callbacks from options
+ return animation.progress( animation.opts.progress )
+ .done( animation.opts.done, animation.opts.complete )
+ .fail( animation.opts.fail )
+ .always( animation.opts.always );
+}
+
+function propFilter( props, specialEasing ) {
+ var index, name, easing, value, hooks;
+
+ // camelCase, specialEasing and expand cssHook pass
+ for ( index in props ) {
+ name = jQuery.camelCase( index );
+ easing = specialEasing[ name ];
+ value = props[ index ];
+ if ( jQuery.isArray( value ) ) {
+ easing = value[ 1 ];
+ value = props[ index ] = value[ 0 ];
+ }
+
+ if ( index !== name ) {
+ props[ name ] = value;
+ delete props[ index ];
+ }
+
+ hooks = jQuery.cssHooks[ name ];
+ if ( hooks && "expand" in hooks ) {
+ value = hooks.expand( value );
+ delete props[ name ];
+
+ // not quite $.extend, this wont overwrite keys already present.
+ // also - reusing 'index' from above because we have the correct "name"
+ for ( index in value ) {
+ if ( !( index in props ) ) {
+ props[ index ] = value[ index ];
+ specialEasing[ index ] = easing;
+ }
+ }
+ } else {
+ specialEasing[ name ] = easing;
+ }
+ }
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+
+ tweener: function( props, callback ) {
+ if ( jQuery.isFunction( props ) ) {
+ callback = props;
+ props = [ "*" ];
+ } else {
+ props = props.split(" ");
+ }
+
+ var prop,
+ index = 0,
+ length = props.length;
+
+ for ( ; index < length ; index++ ) {
+ prop = props[ index ];
+ tweeners[ prop ] = tweeners[ prop ] || [];
+ tweeners[ prop ].unshift( callback );
+ }
+ },
+
+ prefilter: function( callback, prepend ) {
+ if ( prepend ) {
+ animationPrefilters.unshift( callback );
+ } else {
+ animationPrefilters.push( callback );
+ }
+ }
+});
+
+function defaultPrefilter( elem, props, opts ) {
+ /* jshint validthis: true */
+ var prop, value, toggle, tween, hooks, oldfire,
+ anim = this,
+ orig = {},
+ style = elem.style,
+ hidden = elem.nodeType && isHidden( elem ),
+ dataShow = data_priv.get( elem, "fxshow" );
+
+ // handle queue: false promises
+ if ( !opts.queue ) {
+ hooks = jQuery._queueHooks( elem, "fx" );
+ if ( hooks.unqueued == null ) {
+ hooks.unqueued = 0;
+ oldfire = hooks.empty.fire;
+ hooks.empty.fire = function() {
+ if ( !hooks.unqueued ) {
+ oldfire();
+ }
+ };
+ }
+ hooks.unqueued++;
+
+ anim.always(function() {
+ // doing this makes sure that the complete handler will be called
+ // before this completes
+ anim.always(function() {
+ hooks.unqueued--;
+ if ( !jQuery.queue( elem, "fx" ).length ) {
+ hooks.empty.fire();
+ }
+ });
+ });
+ }
+
+ // height/width overflow pass
+ if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
+ // Make sure that nothing sneaks out
+ // Record all 3 overflow attributes because IE9-10 do not
+ // change the overflow attribute when overflowX and
+ // overflowY are set to the same value
+ opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+ // Set display property to inline-block for height/width
+ // animations on inline elements that are having width/height animated
+ if ( jQuery.css( elem, "display" ) === "inline" &&
+ jQuery.css( elem, "float" ) === "none" ) {
+
+ style.display = "inline-block";
+ }
+ }
+
+ if ( opts.overflow ) {
+ style.overflow = "hidden";
+ anim.always(function() {
+ style.overflow = opts.overflow[ 0 ];
+ style.overflowX = opts.overflow[ 1 ];
+ style.overflowY = opts.overflow[ 2 ];
+ });
+ }
+
+
+ // show/hide pass
+ for ( prop in props ) {
+ value = props[ prop ];
+ if ( rfxtypes.exec( value ) ) {
+ delete props[ prop ];
+ toggle = toggle || value === "toggle";
+ if ( value === ( hidden ? "hide" : "show" ) ) {
+
+ // If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden
+ if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
+ hidden = true;
+ } else {
+ continue;
+ }
+ }
+ orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
+ }
+ }
+
+ if ( !jQuery.isEmptyObject( orig ) ) {
+ if ( dataShow ) {
+ if ( "hidden" in dataShow ) {
+ hidden = dataShow.hidden;
+ }
+ } else {
+ dataShow = data_priv.access( elem, "fxshow", {} );
+ }
+
+ // store state if its toggle - enables .stop().toggle() to "reverse"
+ if ( toggle ) {
+ dataShow.hidden = !hidden;
+ }
+ if ( hidden ) {
+ jQuery( elem ).show();
+ } else {
+ anim.done(function() {
+ jQuery( elem ).hide();
+ });
+ }
+ anim.done(function() {
+ var prop;
+
+ data_priv.remove( elem, "fxshow" );
+ for ( prop in orig ) {
+ jQuery.style( elem, prop, orig[ prop ] );
+ }
+ });
+ for ( prop in orig ) {
+ tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
+
+ if ( !( prop in dataShow ) ) {
+ dataShow[ prop ] = tween.start;
+ if ( hidden ) {
+ tween.end = tween.start;
+ tween.start = prop === "width" || prop === "height" ? 1 : 0;
+ }
+ }
+ }
+ }
+}
+
+function Tween( elem, options, prop, end, easing ) {
+ return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+ constructor: Tween,
+ init: function( elem, options, prop, end, easing, unit ) {
+ this.elem = elem;
+ this.prop = prop;
+ this.easing = easing || "swing";
+ this.options = options;
+ this.start = this.now = this.cur();
+ this.end = end;
+ this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+ },
+ cur: function() {
+ var hooks = Tween.propHooks[ this.prop ];
+
+ return hooks && hooks.get ?
+ hooks.get( this ) :
+ Tween.propHooks._default.get( this );
+ },
+ run: function( percent ) {
+ var eased,
+ hooks = Tween.propHooks[ this.prop ];
+
+ if ( this.options.duration ) {
+ this.pos = eased = jQuery.easing[ this.easing ](
+ percent, this.options.duration * percent, 0, 1, this.options.duration
+ );
+ } else {
+ this.pos = eased = percent;
+ }
+ this.now = ( this.end - this.start ) * eased + this.start;
+
+ if ( this.options.step ) {
+ this.options.step.call( this.elem, this.now, this );
+ }
+
+ if ( hooks && hooks.set ) {
+ hooks.set( this );
+ } else {
+ Tween.propHooks._default.set( this );
+ }
+ return this;
+ }
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+ _default: {
+ get: function( tween ) {
+ var result;
+
+ if ( tween.elem[ tween.prop ] != null &&
+ (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
+ return tween.elem[ tween.prop ];
+ }
+
+ // passing an empty string as a 3rd parameter to .css will automatically
+ // attempt a parseFloat and fallback to a string if the parse fails
+ // so, simple values such as "10px" are parsed to Float.
+ // complex values such as "rotate(1rad)" are returned as is.
+ result = jQuery.css( tween.elem, tween.prop, "" );
+ // Empty strings, null, undefined and "auto" are converted to 0.
+ return !result || result === "auto" ? 0 : result;
+ },
+ set: function( tween ) {
+ // use step hook for back compat - use cssHook if its there - use .style if its
+ // available and use plain properties where available
+ if ( jQuery.fx.step[ tween.prop ] ) {
+ jQuery.fx.step[ tween.prop ]( tween );
+ } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
+ jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+ } else {
+ tween.elem[ tween.prop ] = tween.now;
+ }
+ }
+ }
+};
+
+// Support: IE9
+// Panic based approach to setting things on disconnected nodes
+
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+ set: function( tween ) {
+ if ( tween.elem.nodeType && tween.elem.parentNode ) {
+ tween.elem[ tween.prop ] = tween.now;
+ }
+ }
+};
+
+jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
+ var cssFn = jQuery.fn[ name ];
+ jQuery.fn[ name ] = function( speed, easing, callback ) {
+ return speed == null || typeof speed === "boolean" ?
+ cssFn.apply( this, arguments ) :
+ this.animate( genFx( name, true ), speed, easing, callback );
+ };
+});
+
+jQuery.fn.extend({
+ fadeTo: function( speed, to, easing, callback ) {
+
+ // show any hidden elements after setting opacity to 0
+ return this.filter( isHidden ).css( "opacity", 0 ).show()
+
+ // animate to the value specified
+ .end().animate({ opacity: to }, speed, easing, callback );
+ },
+ animate: function( prop, speed, easing, callback ) {
+ var empty = jQuery.isEmptyObject( prop ),
+ optall = jQuery.speed( speed, easing, callback ),
+ doAnimation = function() {
+ // Operate on a copy of prop so per-property easing won't be lost
+ var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+
+ // Empty animations, or finishing resolves immediately
+ if ( empty || data_priv.get( this, "finish" ) ) {
+ anim.stop( true );
+ }
+ };
+ doAnimation.finish = doAnimation;
+
+ return empty || optall.queue === false ?
+ this.each( doAnimation ) :
+ this.queue( optall.queue, doAnimation );
+ },
+ stop: function( type, clearQueue, gotoEnd ) {
+ var stopQueue = function( hooks ) {
+ var stop = hooks.stop;
+ delete hooks.stop;
+ stop( gotoEnd );
+ };
+
+ if ( typeof type !== "string" ) {
+ gotoEnd = clearQueue;
+ clearQueue = type;
+ type = undefined;
+ }
+ if ( clearQueue && type !== false ) {
+ this.queue( type || "fx", [] );
+ }
+
+ return this.each(function() {
+ var dequeue = true,
+ index = type != null && type + "queueHooks",
+ timers = jQuery.timers,
+ data = data_priv.get( this );
+
+ if ( index ) {
+ if ( data[ index ] && data[ index ].stop ) {
+ stopQueue( data[ index ] );
+ }
+ } else {
+ for ( index in data ) {
+ if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+ stopQueue( data[ index ] );
+ }
+ }
+ }
+
+ for ( index = timers.length; index--; ) {
+ if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
+ timers[ index ].anim.stop( gotoEnd );
+ dequeue = false;
+ timers.splice( index, 1 );
+ }
+ }
+
+ // start the next in the queue if the last step wasn't forced
+ // timers currently will call their complete callbacks, which will dequeue
+ // but only if they were gotoEnd
+ if ( dequeue || !gotoEnd ) {
+ jQuery.dequeue( this, type );
+ }
+ });
+ },
+ finish: function( type ) {
+ if ( type !== false ) {
+ type = type || "fx";
+ }
+ return this.each(function() {
+ var index,
+ data = data_priv.get( this ),
+ queue = data[ type + "queue" ],
+ hooks = data[ type + "queueHooks" ],
+ timers = jQuery.timers,
+ length = queue ? queue.length : 0;
+
+ // enable finishing flag on private data
+ data.finish = true;
+
+ // empty the queue first
+ jQuery.queue( this, type, [] );
+
+ if ( hooks && hooks.stop ) {
+ hooks.stop.call( this, true );
+ }
+
+ // look for any active animations, and finish them
+ for ( index = timers.length; index--; ) {
+ if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+ timers[ index ].anim.stop( true );
+ timers.splice( index, 1 );
+ }
+ }
+
+ // look for any animations in the old queue and finish them
+ for ( index = 0; index < length; index++ ) {
+ if ( queue[ index ] && queue[ index ].finish ) {
+ queue[ index ].finish.call( this );
+ }
+ }
+
+ // turn off finishing flag
+ delete data.finish;
+ });
+ }
+});
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+ var which,
+ attrs = { height: type },
+ i = 0;
+
+ // if we include width, step value is 1 to do all cssExpand values,
+ // if we don't include width, step value is 2 to skip over Left and Right
+ includeWidth = includeWidth? 1 : 0;
+ for( ; i < 4 ; i += 2 - includeWidth ) {
+ which = cssExpand[ i ];
+ attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+ }
+
+ if ( includeWidth ) {
+ attrs.opacity = attrs.width = type;
+ }
+
+ return attrs;
+}
+
+// Generate shortcuts for custom animations
+jQuery.each({
+ slideDown: genFx("show"),
+ slideUp: genFx("hide"),
+ slideToggle: genFx("toggle"),
+ fadeIn: { opacity: "show" },
+ fadeOut: { opacity: "hide" },
+ fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+ jQuery.fn[ name ] = function( speed, easing, callback ) {
+ return this.animate( props, speed, easing, callback );
+ };
+});
+
+jQuery.speed = function( speed, easing, fn ) {
+ var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+ complete: fn || !fn && easing ||
+ jQuery.isFunction( speed ) && speed,
+ duration: speed,
+ easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+ };
+
+ opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+ opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+
+ // normalize opt.queue - true/undefined/null -> "fx"
+ if ( opt.queue == null || opt.queue === true ) {
+ opt.queue = "fx";
+ }
+
+ // Queueing
+ opt.old = opt.complete;
+
+ opt.complete = function() {
+ if ( jQuery.isFunction( opt.old ) ) {
+ opt.old.call( this );
+ }
+
+ if ( opt.queue ) {
+ jQuery.dequeue( this, opt.queue );
+ }
+ };
+
+ return opt;
+};
+
+jQuery.easing = {
+ linear: function( p ) {
+ return p;
+ },
+ swing: function( p ) {
+ return 0.5 - Math.cos( p*Math.PI ) / 2;
+ }
+};
+
+jQuery.timers = [];
+jQuery.fx = Tween.prototype.init;
+jQuery.fx.tick = function() {
+ var timer,
+ timers = jQuery.timers,
+ i = 0;
+
+ fxNow = jQuery.now();
+
+ for ( ; i < timers.length; i++ ) {
+ timer = timers[ i ];
+ // Checks the timer has not already been removed
+ if ( !timer() && timers[ i ] === timer ) {
+ timers.splice( i--, 1 );
+ }
+ }
+
+ if ( !timers.length ) {
+ jQuery.fx.stop();
+ }
+ fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+ if ( timer() && jQuery.timers.push( timer ) ) {
+ jQuery.fx.start();
+ }
+};
+
+jQuery.fx.interval = 13;
+
+jQuery.fx.start = function() {
+ if ( !timerId ) {
+ timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
+ }
+};
+
+jQuery.fx.stop = function() {
+ clearInterval( timerId );
+ timerId = null;
+};
+
+jQuery.fx.speeds = {
+ slow: 600,
+ fast: 200,
+ // Default speed
+ _default: 400
+};
+
+// Back Compat <1.8 extension point
+jQuery.fx.step = {};
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+ jQuery.expr.filters.animated = function( elem ) {
+ return jQuery.grep(jQuery.timers, function( fn ) {
+ return elem === fn.elem;
+ }).length;
+ };
+}
+jQuery.fn.offset = function( options ) {
+ if ( arguments.length ) {
+ return options === undefined ?
+ this :
+ this.each(function( i ) {
+ jQuery.offset.setOffset( this, options, i );
+ });
+ }
+
+ var docElem, win,
+ elem = this[ 0 ],
+ box = { top: 0, left: 0 },
+ doc = elem && elem.ownerDocument;
+
+ if ( !doc ) {
+ return;
+ }
+
+ docElem = doc.documentElement;
+
+ // Make sure it's not a disconnected DOM node
+ if ( !jQuery.contains( docElem, elem ) ) {
+ return box;
+ }
+
+ // If we don't have gBCR, just use 0,0 rather than error
+ // BlackBerry 5, iOS 3 (original iPhone)
+ if ( typeof elem.getBoundingClientRect !== core_strundefined ) {
+ box = elem.getBoundingClientRect();
+ }
+ win = getWindow( doc );
+ return {
+ top: box.top + win.pageYOffset - docElem.clientTop,
+ left: box.left + win.pageXOffset - docElem.clientLeft
+ };
+};
+
+jQuery.offset = {
+
+ setOffset: function( elem, options, i ) {
+ var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
+ position = jQuery.css( elem, "position" ),
+ curElem = jQuery( elem ),
+ props = {};
+
+ // Set position first, in-case top/left are set even on static elem
+ if ( position === "static" ) {
+ elem.style.position = "relative";
+ }
+
+ curOffset = curElem.offset();
+ curCSSTop = jQuery.css( elem, "top" );
+ curCSSLeft = jQuery.css( elem, "left" );
+ calculatePosition = ( position === "absolute" || position === "fixed" ) && ( curCSSTop + curCSSLeft ).indexOf("auto") > -1;
+
+ // Need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+ if ( calculatePosition ) {
+ curPosition = curElem.position();
+ curTop = curPosition.top;
+ curLeft = curPosition.left;
+
+ } else {
+ curTop = parseFloat( curCSSTop ) || 0;
+ curLeft = parseFloat( curCSSLeft ) || 0;
+ }
+
+ if ( jQuery.isFunction( options ) ) {
+ options = options.call( elem, i, curOffset );
+ }
+
+ if ( options.top != null ) {
+ props.top = ( options.top - curOffset.top ) + curTop;
+ }
+ if ( options.left != null ) {
+ props.left = ( options.left - curOffset.left ) + curLeft;
+ }
+
+ if ( "using" in options ) {
+ options.using.call( elem, props );
+
+ } else {
+ curElem.css( props );
+ }
+ }
+};
+
+
+jQuery.fn.extend({
+
+ position: function() {
+ if ( !this[ 0 ] ) {
+ return;
+ }
+
+ var offsetParent, offset,
+ elem = this[ 0 ],
+ parentOffset = { top: 0, left: 0 };
+
+ // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent
+ if ( jQuery.css( elem, "position" ) === "fixed" ) {
+ // We assume that getBoundingClientRect is available when computed position is fixed
+ offset = elem.getBoundingClientRect();
+
+ } else {
+ // Get *real* offsetParent
+ offsetParent = this.offsetParent();
+
+ // Get correct offsets
+ offset = this.offset();
+ if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
+ parentOffset = offsetParent.offset();
+ }
+
+ // Add offsetParent borders
+ parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
+ parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
+ }
+
+ // Subtract parent offsets and element margins
+ return {
+ top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+ left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
+ };
+ },
+
+ offsetParent: function() {
+ return this.map(function() {
+ var offsetParent = this.offsetParent || docElem;
+
+ while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) {
+ offsetParent = offsetParent.offsetParent;
+ }
+
+ return offsetParent || docElem;
+ });
+ }
+});
+
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
+ var top = "pageYOffset" === prop;
+
+ jQuery.fn[ method ] = function( val ) {
+ return jQuery.access( this, function( elem, method, val ) {
+ var win = getWindow( elem );
+
+ if ( val === undefined ) {
+ return win ? win[ prop ] : elem[ method ];
+ }
+
+ if ( win ) {
+ win.scrollTo(
+ !top ? val : window.pageXOffset,
+ top ? val : window.pageYOffset
+ );
+
+ } else {
+ elem[ method ] = val;
+ }
+ }, method, val, arguments.length, null );
+ };
+});
+
+function getWindow( elem ) {
+ return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;
+}
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+ jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
+ // margin is only for outerHeight, outerWidth
+ jQuery.fn[ funcName ] = function( margin, value ) {
+ var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+ extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+ return jQuery.access( this, function( elem, type, value ) {
+ var doc;
+
+ if ( jQuery.isWindow( elem ) ) {
+ // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
+ // isn't a whole lot we can do. See pull request at this URL for discussion:
+ // https://github.com/jquery/jquery/pull/764
+ return elem.document.documentElement[ "client" + name ];
+ }
+
+ // Get document width or height
+ if ( elem.nodeType === 9 ) {
+ doc = elem.documentElement;
+
+ // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
+ // whichever is greatest
+ return Math.max(
+ elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+ elem.body[ "offset" + name ], doc[ "offset" + name ],
+ doc[ "client" + name ]
+ );
+ }
+
+ return value === undefined ?
+ // Get width or height on the element, requesting but not forcing parseFloat
+ jQuery.css( elem, type, extra ) :
+
+ // Set width or height on the element
+ jQuery.style( elem, type, value, extra );
+ }, type, chainable ? margin : undefined, chainable, null );
+ };
+ });
+});
+// Limit scope pollution from any deprecated API
+// (function() {
+
+// The number of elements contained in the matched element set
+jQuery.fn.size = function() {
+ return this.length;
+};
+
+jQuery.fn.andSelf = jQuery.fn.addBack;
+
+// })();
+if ( typeof module === "object" && module && typeof module.exports === "object" ) {
+ // Expose jQuery as module.exports in loaders that implement the Node
+ // module pattern (including browserify). Do not create the global, since
+ // the user will be storing it themselves locally, and globals are frowned
+ // upon in the Node module world.
+ module.exports = jQuery;
+} else {
+ // Register as a named AMD module, since jQuery can be concatenated with other
+ // files that may use define, but not via a proper concatenation script that
+ // understands anonymous AMD modules. A named AMD is safest and most robust
+ // way to register. Lowercase jquery is used because AMD module names are
+ // derived from file names, and jQuery is normally delivered in a lowercase
+ // file name. Do this after creating the global so that if an AMD module wants
+ // to call noConflict to hide this version of jQuery, it will work.
+ if ( typeof define === "function" && define.amd ) {
+ define( "jquery", [], function () { return jQuery; } );
+ }
+}
+
+// If there is a window object, that at least has a document property,
+// define jQuery and $ identifiers
+if ( typeof window === "object" && typeof window.document === "object" ) {
+ window.jQuery = window.$ = jQuery;
+}
+
+})( window );
diff --git a/GitCandy.Web/Scripts/marked.js b/GitCandy.Web/Scripts/marked.js
new file mode 100644
index 0000000..e2f08c9
--- /dev/null
+++ b/GitCandy.Web/Scripts/marked.js
@@ -0,0 +1,1266 @@
+/**
+ * marked - a markdown parser
+ * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed)
+ * https://github.com/chjj/marked
+ */
+
+;(function() {
+
+/**
+ * Block-Level Grammar
+ */
+
+var block = {
+ newline: /^\n+/,
+ code: /^( {4}[^\n]+\n*)+/,
+ fences: noop,
+ hr: /^( *[-*_]){3,} *(?:\n+|$)/,
+ heading: /^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,
+ nptable: noop,
+ lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,
+ blockquote: /^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/,
+ list: /^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,
+ html: /^ *(?:comment|closed|closing) *(?:\n{2,}|\s*$)/,
+ def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,
+ table: noop,
+ paragraph: /^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,
+ text: /^[^\n]+/
+};
+
+block.bullet = /(?:[*+-]|\d+\.)/;
+block.item = /^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/;
+block.item = replace(block.item, 'gm')
+ (/bull/g, block.bullet)
+ ();
+
+block.list = replace(block.list)
+ (/bull/g, block.bullet)
+ ('hr', '\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))')
+ ('def', '\\n+(?=' + block.def.source + ')')
+ ();
+
+block.blockquote = replace(block.blockquote)
+ ('def', block.def)
+ ();
+
+block._tag = '(?!(?:'
+ + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code'
+ + '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo'
+ + '|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b';
+
+block.html = replace(block.html)
+ ('comment', /<!--[\s\S]*?-->/)
+ ('closed', /<(tag)[\s\S]+?<\/\1>/)
+ ('closing', /<tag(?:"[^"]*"|'[^']*'|[^'">])*?>/)
+ (/tag/g, block._tag)
+ ();
+
+block.paragraph = replace(block.paragraph)
+ ('hr', block.hr)
+ ('heading', block.heading)
+ ('lheading', block.lheading)
+ ('blockquote', block.blockquote)
+ ('tag', '<' + block._tag)
+ ('def', block.def)
+ ();
+
+/**
+ * Normal Block Grammar
+ */
+
+block.normal = merge({}, block);
+
+/**
+ * GFM Block Grammar
+ */
+
+block.gfm = merge({}, block.normal, {
+ fences: /^ *(`{3,}|~{3,}) *(\S+)? *\n([\s\S]+?)\s*\1 *(?:\n+|$)/,
+ paragraph: /^/
+});
+
+block.gfm.paragraph = replace(block.paragraph)
+ ('(?!', '(?!'
+ + block.gfm.fences.source.replace('\\1', '\\2') + '|'
+ + block.list.source.replace('\\1', '\\3') + '|')
+ ();
+
+/**
+ * GFM + Tables Block Grammar
+ */
+
+block.tables = merge({}, block.gfm, {
+ nptable: /^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,
+ table: /^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/
+});
+
+/**
+ * Block Lexer
+ */
+
+function Lexer(options) {
+ this.tokens = [];
+ this.tokens.links = {};
+ this.options = options || marked.defaults;
+ this.rules = block.normal;
+
+ if (this.options.gfm) {
+ if (this.options.tables) {
+ this.rules = block.tables;
+ } else {
+ this.rules = block.gfm;
+ }
+ }
+}
+
+/**
+ * Expose Block Rules
+ */
+
+Lexer.rules = block;
+
+/**
+ * Static Lex Method
+ */
+
+Lexer.lex = function(src, options) {
+ var lexer = new Lexer(options);
+ return lexer.lex(src);
+};
+
+/**
+ * Preprocessing
+ */
+
+Lexer.prototype.lex = function(src) {
+ src = src
+ .replace(/\r\n|\r/g, '\n')
+ .replace(/\t/g, ' ')
+ .replace(/\u00a0/g, ' ')
+ .replace(/\u2424/g, '\n');
+
+ return this.token(src, true);
+};
+
+/**
+ * Lexing
+ */
+
+Lexer.prototype.token = function(src, top, bq) {
+ var src = src.replace(/^ +$/gm, '')
+ , next
+ , loose
+ , cap
+ , bull
+ , b
+ , item
+ , space
+ , i
+ , l;
+
+ while (src) {
+ // newline
+ if (cap = this.rules.newline.exec(src)) {
+ src = src.substring(cap[0].length);
+ if (cap[0].length > 1) {
+ this.tokens.push({
+ type: 'space'
+ });
+ }
+ }
+
+ // code
+ if (cap = this.rules.code.exec(src)) {
+ src = src.substring(cap[0].length);
+ cap = cap[0].replace(/^ {4}/gm, '');
+ this.tokens.push({
+ type: 'code',
+ text: !this.options.pedantic
+ ? cap.replace(/\n+$/, '')
+ : cap
+ });
+ continue;
+ }
+
+ // fences (gfm)
+ if (cap = this.rules.fences.exec(src)) {
+ src = src.substring(cap[0].length);
+ this.tokens.push({
+ type: 'code',
+ lang: cap[2],
+ text: cap[3]
+ });
+ continue;
+ }
+
+ // heading
+ if (cap = this.rules.heading.exec(src)) {
+ src = src.substring(cap[0].length);
+ this.tokens.push({
+ type: 'heading',
+ depth: cap[1].length,
+ text: cap[2]
+ });
+ continue;
+ }
+
+ // table no leading pipe (gfm)
+ if (top && (cap = this.rules.nptable.exec(src))) {
+ src = src.substring(cap[0].length);
+
+ item = {
+ type: 'table',
+ header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */),
+ align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
+ cells: cap[3].replace(/\n$/, '').split('\n')
+ };
+
+ for (i = 0; i < item.align.length; i++) {
+ if (/^ *-+: *$/.test(item.align[i])) {
+ item.align[i] = 'right';
+ } else if (/^ *:-+: *$/.test(item.align[i])) {
+ item.align[i] = 'center';
+ } else if (/^ *:-+ *$/.test(item.align[i])) {
+ item.align[i] = 'left';
+ } else {
+ item.align[i] = null;
+ }
+ }
+
+ for (i = 0; i < item.cells.length; i++) {
+ item.cells[i] = item.cells[i].split(/ *\| */);
+ }
+
+ this.tokens.push(item);
+
+ continue;
+ }
+
+ // lheading
+ if (cap = this.rules.lheading.exec(src)) {
+ src = src.substring(cap[0].length);
+ this.tokens.push({
+ type: 'heading',
+ depth: cap[2] === '=' ? 1 : 2,
+ text: cap[1]
+ });
+ continue;
+ }
+
+ // hr
+ if (cap = this.rules.hr.exec(src)) {
+ src = src.substring(cap[0].length);
+ this.tokens.push({
+ type: 'hr'
+ });
+ continue;
+ }
+
+ // blockquote
+ if (cap = this.rules.blockquote.exec(src)) {
+ src = src.substring(cap[0].length);
+
+ this.tokens.push({
+ type: 'blockquote_start'
+ });
+
+ cap = cap[0].replace(/^ *> ?/gm, '');
+
+ // Pass `top` to keep the current
+ // "toplevel" state. This is exactly
+ // how markdown.pl works.
+ this.token(cap, top, true);
+
+ this.tokens.push({
+ type: 'blockquote_end'
+ });
+
+ continue;
+ }
+
+ // list
+ if (cap = this.rules.list.exec(src)) {
+ src = src.substring(cap[0].length);
+ bull = cap[2];
+
+ this.tokens.push({
+ type: 'list_start',
+ ordered: bull.length > 1
+ });
+
+ // Get each top-level item.
+ cap = cap[0].match(this.rules.item);
+
+ next = false;
+ l = cap.length;
+ i = 0;
+
+ for (; i < l; i++) {
+ item = cap[i];
+
+ // Remove the list item's bullet
+ // so it is seen as the next token.
+ space = item.length;
+ item = item.replace(/^ *([*+-]|\d+\.) +/, '');
+
+ // Outdent whatever the
+ // list item contains. Hacky.
+ if (~item.indexOf('\n ')) {
+ space -= item.length;
+ item = !this.options.pedantic
+ ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')
+ : item.replace(/^ {1,4}/gm, '');
+ }
+
+ // Determine whether the next list item belongs here.
+ // Backpedal if it does not belong in this list.
+ if (this.options.smartLists && i !== l - 1) {
+ b = block.bullet.exec(cap[i + 1])[0];
+ if (bull !== b && !(bull.length > 1 && b.length > 1)) {
+ src = cap.slice(i + 1).join('\n') + src;
+ i = l - 1;
+ }
+ }
+
+ // Determine whether item is loose or not.
+ // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/
+ // for discount behavior.
+ loose = next || /\n\n(?!\s*$)/.test(item);
+ if (i !== l - 1) {
+ next = item.charAt(item.length - 1) === '\n';
+ if (!loose) loose = next;
+ }
+
+ this.tokens.push({
+ type: loose
+ ? 'loose_item_start'
+ : 'list_item_start'
+ });
+
+ // Recurse.
+ this.token(item, false, bq);
+
+ this.tokens.push({
+ type: 'list_item_end'
+ });
+ }
+
+ this.tokens.push({
+ type: 'list_end'
+ });
+
+ continue;
+ }
+
+ // html
+ if (cap = this.rules.html.exec(src)) {
+ src = src.substring(cap[0].length);
+ this.tokens.push({
+ type: this.options.sanitize
+ ? 'paragraph'
+ : 'html',
+ pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',
+ text: cap[0]
+ });
+ continue;
+ }
+
+ // def
+ if ((!bq && top) && (cap = this.rules.def.exec(src))) {
+ src = src.substring(cap[0].length);
+ this.tokens.links[cap[1].toLowerCase()] = {
+ href: cap[2],
+ title: cap[3]
+ };
+ continue;
+ }
+
+ // table (gfm)
+ if (top && (cap = this.rules.table.exec(src))) {
+ src = src.substring(cap[0].length);
+
+ item = {
+ type: 'table',
+ header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */),
+ align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
+ cells: cap[3].replace(/(?: *\| *)?\n$/, '').split('\n')
+ };
+
+ for (i = 0; i < item.align.length; i++) {
+ if (/^ *-+: *$/.test(item.align[i])) {
+ item.align[i] = 'right';
+ } else if (/^ *:-+: *$/.test(item.align[i])) {
+ item.align[i] = 'center';
+ } else if (/^ *:-+ *$/.test(item.align[i])) {
+ item.align[i] = 'left';
+ } else {
+ item.align[i] = null;
+ }
+ }
+
+ for (i = 0; i < item.cells.length; i++) {
+ item.cells[i] = item.cells[i]
+ .replace(/^ *\| *| *\| *$/g, '')
+ .split(/ *\| */);
+ }
+
+ this.tokens.push(item);
+
+ continue;
+ }
+
+ // top-level paragraph
+ if (top && (cap = this.rules.paragraph.exec(src))) {
+ src = src.substring(cap[0].length);
+ this.tokens.push({
+ type: 'paragraph',
+ text: cap[1].charAt(cap[1].length - 1) === '\n'
+ ? cap[1].slice(0, -1)
+ : cap[1]
+ });
+ continue;
+ }
+
+ // text
+ if (cap = this.rules.text.exec(src)) {
+ // Top-level should never reach here.
+ src = src.substring(cap[0].length);
+ this.tokens.push({
+ type: 'text',
+ text: cap[0]
+ });
+ continue;
+ }
+
+ if (src) {
+ throw new
+ Error('Infinite loop on byte: ' + src.charCodeAt(0));
+ }
+ }
+
+ return this.tokens;
+};
+
+/**
+ * Inline-Level Grammar
+ */
+
+var inline = {
+ escape: /^\\([\\`*{}\[\]()#+\-.!_>])/,
+ autolink: /^<([^ >]+(@|:\/)[^ >]+)>/,
+ url: noop,
+ tag: /^<!--[\s\S]*?-->|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,
+ link: /^!?\[(inside)\]\(href\)/,
+ reflink: /^!?\[(inside)\]\s*\[([^\]]*)\]/,
+ nolink: /^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,
+ strong: /^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,
+ em: /^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
+ code: /^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,
+ br: /^ {2,}\n(?!\s*$)/,
+ del: noop,
+ text: /^[\s\S]+?(?=[\\<!\[_*`]| {2,}\n|$)/
+};
+
+inline._inside = /(?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*/;
+inline._href = /\s*<?([\s\S]*?)>?(?:\s+['"]([\s\S]*?)['"])?\s*/;
+
+inline.link = replace(inline.link)
+ ('inside', inline._inside)
+ ('href', inline._href)
+ ();
+
+inline.reflink = replace(inline.reflink)
+ ('inside', inline._inside)
+ ();
+
+/**
+ * Normal Inline Grammar
+ */
+
+inline.normal = merge({}, inline);
+
+/**
+ * Pedantic Inline Grammar
+ */
+
+inline.pedantic = merge({}, inline.normal, {
+ strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
+ em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/
+});
+
+/**
+ * GFM Inline Grammar
+ */
+
+inline.gfm = merge({}, inline.normal, {
+ escape: replace(inline.escape)('])', '~|])')(),
+ url: /^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,
+ del: /^~~(?=\S)([\s\S]*?\S)~~/,
+ text: replace(inline.text)
+ (']|', '~]|')
+ ('|', '|https?://|')
+ ()
+});
+
+/**
+ * GFM + Line Breaks Inline Grammar
+ */
+
+inline.breaks = merge({}, inline.gfm, {
+ br: replace(inline.br)('{2,}', '*')(),
+ text: replace(inline.gfm.text)('{2,}', '*')()
+});
+
+/**
+ * Inline Lexer & Compiler
+ */
+
+function InlineLexer(links, options) {
+ this.options = options || marked.defaults;
+ this.links = links;
+ this.rules = inline.normal;
+ this.renderer = this.options.renderer || new Renderer;
+ this.renderer.options = this.options;
+
+ if (!this.links) {
+ throw new
+ Error('Tokens array requires a `links` property.');
+ }
+
+ if (this.options.gfm) {
+ if (this.options.breaks) {
+ this.rules = inline.breaks;
+ } else {
+ this.rules = inline.gfm;
+ }
+ } else if (this.options.pedantic) {
+ this.rules = inline.pedantic;
+ }
+}
+
+/**
+ * Expose Inline Rules
+ */
+
+InlineLexer.rules = inline;
+
+/**
+ * Static Lexing/Compiling Method
+ */
+
+InlineLexer.output = function(src, links, options) {
+ var inline = new InlineLexer(links, options);
+ return inline.output(src);
+};
+
+/**
+ * Lexing/Compiling
+ */
+
+InlineLexer.prototype.output = function(src) {
+ var out = ''
+ , link
+ , text
+ , href
+ , cap;
+
+ while (src) {
+ // escape
+ if (cap = this.rules.escape.exec(src)) {
+ src = src.substring(cap[0].length);
+ out += cap[1];
+ continue;
+ }
+
+ // autolink
+ if (cap = this.rules.autolink.exec(src)) {
+ src = src.substring(cap[0].length);
+ if (cap[2] === '@') {
+ text = cap[1].charAt(6) === ':'
+ ? this.mangle(cap[1].substring(7))
+ : this.mangle(cap[1]);
+ href = this.mangle('mailto:') + text;
+ } else {
+ text = escape(cap[1]);
+ href = text;
+ }
+ out += this.renderer.link(href, null, text);
+ continue;
+ }
+
+ // url (gfm)
+ if (!this.inLink && (cap = this.rules.url.exec(src))) {
+ src = src.substring(cap[0].length);
+ text = escape(cap[1]);
+ href = text;
+ out += this.renderer.link(href, null, text);
+ continue;
+ }
+
+ // tag
+ if (cap = this.rules.tag.exec(src)) {
+ if (!this.inLink && /^<a /i.test(cap[0])) {
+ this.inLink = true;
+ } else if (this.inLink && /^<\/a>/i.test(cap[0])) {
+ this.inLink = false;
+ }
+ src = src.substring(cap[0].length);
+ out += this.options.sanitize
+ ? escape(cap[0])
+ : cap[0];
+ continue;
+ }
+
+ // link
+ if (cap = this.rules.link.exec(src)) {
+ src = src.substring(cap[0].length);
+ this.inLink = true;
+ out += this.outputLink(cap, {
+ href: cap[2],
+ title: cap[3]
+ });
+ this.inLink = false;
+ continue;
+ }
+
+ // reflink, nolink
+ if ((cap = this.rules.reflink.exec(src))
+ || (cap = this.rules.nolink.exec(src))) {
+ src = src.substring(cap[0].length);
+ link = (cap[2] || cap[1]).replace(/\s+/g, ' ');
+ link = this.links[link.toLowerCase()];
+ if (!link || !link.href) {
+ out += cap[0].charAt(0);
+ src = cap[0].substring(1) + src;
+ continue;
+ }
+ this.inLink = true;
+ out += this.outputLink(cap, link);
+ this.inLink = false;
+ continue;
+ }
+
+ // strong
+ if (cap = this.rules.strong.exec(src)) {
+ src = src.substring(cap[0].length);
+ out += this.renderer.strong(this.output(cap[2] || cap[1]));
+ continue;
+ }
+
+ // em
+ if (cap = this.rules.em.exec(src)) {
+ src = src.substring(cap[0].length);
+ out += this.renderer.em(this.output(cap[2] || cap[1]));
+ continue;
+ }
+
+ // code
+ if (cap = this.rules.code.exec(src)) {
+ src = src.substring(cap[0].length);
+ out += this.renderer.codespan(escape(cap[2], true));
+ continue;
+ }
+
+ // br
+ if (cap = this.rules.br.exec(src)) {
+ src = src.substring(cap[0].length);
+ out += this.renderer.br();
+ continue;
+ }
+
+ // del (gfm)
+ if (cap = this.rules.del.exec(src)) {
+ src = src.substring(cap[0].length);
+ out += this.renderer.del(this.output(cap[1]));
+ continue;
+ }
+
+ // text
+ if (cap = this.rules.text.exec(src)) {
+ src = src.substring(cap[0].length);
+ out += escape(this.smartypants(cap[0]));
+ continue;
+ }
+
+ if (src) {
+ throw new
+ Error('Infinite loop on byte: ' + src.charCodeAt(0));
+ }
+ }
+
+ return out;
+};
+
+/**
+ * Compile Link
+ */
+
+InlineLexer.prototype.outputLink = function(cap, link) {
+ var href = escape(link.href)
+ , title = link.title ? escape(link.title) : null;
+
+ return cap[0].charAt(0) !== '!'
+ ? this.renderer.link(href, title, this.output(cap[1]))
+ : this.renderer.image(href, title, escape(cap[1]));
+};
+
+/**
+ * Smartypants Transformations
+ */
+
+InlineLexer.prototype.smartypants = function(text) {
+ if (!this.options.smartypants) return text;
+ return text
+ // em-dashes
+ .replace(/--/g, '\u2014')
+ // opening singles
+ .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018')
+ // closing singles & apostrophes
+ .replace(/'/g, '\u2019')
+ // opening doubles
+ .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c')
+ // closing doubles
+ .replace(/"/g, '\u201d')
+ // ellipses
+ .replace(/\.{3}/g, '\u2026');
+};
+
+/**
+ * Mangle Links
+ */
+
+InlineLexer.prototype.mangle = function(text) {
+ var out = ''
+ , l = text.length
+ , i = 0
+ , ch;
+
+ for (; i < l; i++) {
+ ch = text.charCodeAt(i);
+ if (Math.random() > 0.5) {
+ ch = 'x' + ch.toString(16);
+ }
+ out += '&#' + ch + ';';
+ }
+
+ return out;
+};
+
+/**
+ * Renderer
+ */
+
+function Renderer(options) {
+ this.options = options || {};
+}
+
+Renderer.prototype.code = function(code, lang, escaped) {
+ if (this.options.highlight) {
+ var out = this.options.highlight(code, lang);
+ if (out != null && out !== code) {
+ escaped = true;
+ code = out;
+ }
+ }
+
+ if (!lang) {
+ return '<pre><code>'
+ + (escaped ? code : escape(code, true))
+ + '\n</code></pre>';
+ }
+
+ return '<pre><code class="'
+ + this.options.langPrefix
+ + escape(lang, true)
+ + '">'
+ + (escaped ? code : escape(code, true))
+ + '\n</code></pre>\n';
+};
+
+Renderer.prototype.blockquote = function(quote) {
+ return '<blockquote>\n' + quote + '</blockquote>\n';
+};
+
+Renderer.prototype.html = function(html) {
+ return html;
+};
+
+Renderer.prototype.heading = function(text, level, raw) {
+ return '<h'
+ + level
+ + ' id="'
+ + this.options.headerPrefix
+ + raw.toLowerCase().replace(/[^\w]+/g, '-')
+ + '">'
+ + text
+ + '</h'
+ + level
+ + '>\n';
+};
+
+Renderer.prototype.hr = function() {
+ return this.options.xhtml ? '<hr/>\n' : '<hr>\n';
+};
+
+Renderer.prototype.list = function(body, ordered) {
+ var type = ordered ? 'ol' : 'ul';
+ return '<' + type + '>\n' + body + '</' + type + '>\n';
+};
+
+Renderer.prototype.listitem = function(text) {
+ return '<li>' + text + '</li>\n';
+};
+
+Renderer.prototype.paragraph = function(text) {
+ return '<p>' + text + '</p>\n';
+};
+
+Renderer.prototype.table = function(header, body) {
+ return '<table>\n'
+ + '<thead>\n'
+ + header
+ + '</thead>\n'
+ + '<tbody>\n'
+ + body
+ + '</tbody>\n'
+ + '</table>\n';
+};
+
+Renderer.prototype.tablerow = function(content) {
+ return '<tr>\n' + content + '</tr>\n';
+};
+
+Renderer.prototype.tablecell = function(content, flags) {
+ var type = flags.header ? 'th' : 'td';
+ var tag = flags.align
+ ? '<' + type + ' style="text-align:' + flags.align + '">'
+ : '<' + type + '>';
+ return tag + content + '</' + type + '>\n';
+};
+
+// span level renderer
+Renderer.prototype.strong = function(text) {
+ return '<strong>' + text + '</strong>';
+};
+
+Renderer.prototype.em = function(text) {
+ return '<em>' + text + '</em>';
+};
+
+Renderer.prototype.codespan = function(text) {
+ return '<code>' + text + '</code>';
+};
+
+Renderer.prototype.br = function() {
+ return this.options.xhtml ? '<br/>' : '<br>';
+};
+
+Renderer.prototype.del = function(text) {
+ return '<del>' + text + '</del>';
+};
+
+Renderer.prototype.link = function(href, title, text) {
+ if (this.options.sanitize) {
+ try {
+ var prot = decodeURIComponent(unescape(href))
+ .replace(/[^\w:]/g, '')
+ .toLowerCase();
+ } catch (e) {
+ return '';
+ }
+ if (prot.indexOf('javascript:') === 0) {
+ return '';
+ }
+ }
+ var out = '<a href="' + href + '"';
+ if (title) {
+ out += ' title="' + title + '"';
+ }
+ out += '>' + text + '</a>';
+ return out;
+};
+
+Renderer.prototype.image = function(href, title, text) {
+ var out = '<img src="' + href + '" alt="' + text + '"';
+ if (title) {
+ out += ' title="' + title + '"';
+ }
+ out += this.options.xhtml ? '/>' : '>';
+ return out;
+};
+
+/**
+ * Parsing & Compiling
+ */
+
+function Parser(options) {
+ this.tokens = [];
+ this.token = null;
+ this.options = options || marked.defaults;
+ this.options.renderer = this.options.renderer || new Renderer;
+ this.renderer = this.options.renderer;
+ this.renderer.options = this.options;
+}
+
+/**
+ * Static Parse Method
+ */
+
+Parser.parse = function(src, options, renderer) {
+ var parser = new Parser(options, renderer);
+ return parser.parse(src);
+};
+
+/**
+ * Parse Loop
+ */
+
+Parser.prototype.parse = function(src) {
+ this.inline = new InlineLexer(src.links, this.options, this.renderer);
+ this.tokens = src.reverse();
+
+ var out = '';
+ while (this.next()) {
+ out += this.tok();
+ }
+
+ return out;
+};
+
+/**
+ * Next Token
+ */
+
+Parser.prototype.next = function() {
+ return this.token = this.tokens.pop();
+};
+
+/**
+ * Preview Next Token
+ */
+
+Parser.prototype.peek = function() {
+ return this.tokens[this.tokens.length - 1] || 0;
+};
+
+/**
+ * Parse Text Tokens
+ */
+
+Parser.prototype.parseText = function() {
+ var body = this.token.text;
+
+ while (this.peek().type === 'text') {
+ body += '\n' + this.next().text;
+ }
+
+ return this.inline.output(body);
+};
+
+/**
+ * Parse Current Token
+ */
+
+Parser.prototype.tok = function() {
+ switch (this.token.type) {
+ case 'space': {
+ return '';
+ }
+ case 'hr': {
+ return this.renderer.hr();
+ }
+ case 'heading': {
+ return this.renderer.heading(
+ this.inline.output(this.token.text),
+ this.token.depth,
+ this.token.text);
+ }
+ case 'code': {
+ return this.renderer.code(this.token.text,
+ this.token.lang,
+ this.token.escaped);
+ }
+ case 'table': {
+ var header = ''
+ , body = ''
+ , i
+ , row
+ , cell
+ , flags
+ , j;
+
+ // header
+ cell = '';
+ for (i = 0; i < this.token.header.length; i++) {
+ flags = { header: true, align: this.token.align[i] };
+ cell += this.renderer.tablecell(
+ this.inline.output(this.token.header[i]),
+ { header: true, align: this.token.align[i] }
+ );
+ }
+ header += this.renderer.tablerow(cell);
+
+ for (i = 0; i < this.token.cells.length; i++) {
+ row = this.token.cells[i];
+
+ cell = '';
+ for (j = 0; j < row.length; j++) {
+ cell += this.renderer.tablecell(
+ this.inline.output(row[j]),
+ { header: false, align: this.token.align[j] }
+ );
+ }
+
+ body += this.renderer.tablerow(cell);
+ }
+ return this.renderer.table(header, body);
+ }
+ case 'blockquote_start': {
+ var body = '';
+
+ while (this.next().type !== 'blockquote_end') {
+ body += this.tok();
+ }
+
+ return this.renderer.blockquote(body);
+ }
+ case 'list_start': {
+ var body = ''
+ , ordered = this.token.ordered;
+
+ while (this.next().type !== 'list_end') {
+ body += this.tok();
+ }
+
+ return this.renderer.list(body, ordered);
+ }
+ case 'list_item_start': {
+ var body = '';
+
+ while (this.next().type !== 'list_item_end') {
+ body += this.token.type === 'text'
+ ? this.parseText()
+ : this.tok();
+ }
+
+ return this.renderer.listitem(body);
+ }
+ case 'loose_item_start': {
+ var body = '';
+
+ while (this.next().type !== 'list_item_end') {
+ body += this.tok();
+ }
+
+ return this.renderer.listitem(body);
+ }
+ case 'html': {
+ var html = !this.token.pre && !this.options.pedantic
+ ? this.inline.output(this.token.text)
+ : this.token.text;
+ return this.renderer.html(html);
+ }
+ case 'paragraph': {
+ return this.renderer.paragraph(this.inline.output(this.token.text));
+ }
+ case 'text': {
+ return this.renderer.paragraph(this.parseText());
+ }
+ }
+};
+
+/**
+ * Helpers
+ */
+
+function escape(html, encode) {
+ return html
+ .replace(!encode ? /&(?!#?\w+;)/g : /&/g, '&')
+ .replace(/</g, '<')
+ .replace(/>/g, '>')
+ .replace(/"/g, '"')
+ .replace(/'/g, ''');
+}
+
+function unescape(html) {
+ return html.replace(/&([#\w]+);/g, function(_, n) {
+ n = n.toLowerCase();
+ if (n === 'colon') return ':';
+ if (n.charAt(0) === '#') {
+ return n.charAt(1) === 'x'
+ ? String.fromCharCode(parseInt(n.substring(2), 16))
+ : String.fromCharCode(+n.substring(1));
+ }
+ return '';
+ });
+}
+
+function replace(regex, opt) {
+ regex = regex.source;
+ opt = opt || '';
+ return function self(name, val) {
+ if (!name) return new RegExp(regex, opt);
+ val = val.source || val;
+ val = val.replace(/(^|[^\[])\^/g, '$1');
+ regex = regex.replace(name, val);
+ return self;
+ };
+}
+
+function noop() {}
+noop.exec = noop;
+
+function merge(obj) {
+ var i = 1
+ , target
+ , key;
+
+ for (; i < arguments.length; i++) {
+ target = arguments[i];
+ for (key in target) {
+ if (Object.prototype.hasOwnProperty.call(target, key)) {
+ obj[key] = target[key];
+ }
+ }
+ }
+
+ return obj;
+}
+
+
+/**
+ * Marked
+ */
+
+function marked(src, opt, callback) {
+ if (callback || typeof opt === 'function') {
+ if (!callback) {
+ callback = opt;
+ opt = null;
+ }
+
+ opt = merge({}, marked.defaults, opt || {});
+
+ var highlight = opt.highlight
+ , tokens
+ , pending
+ , i = 0;
+
+ try {
+ tokens = Lexer.lex(src, opt)
+ } catch (e) {
+ return callback(e);
+ }
+
+ pending = tokens.length;
+
+ var done = function() {
+ var out, err;
+
+ try {
+ out = Parser.parse(tokens, opt);
+ } catch (e) {
+ err = e;
+ }
+
+ opt.highlight = highlight;
+
+ return err
+ ? callback(err)
+ : callback(null, out);
+ };
+
+ if (!highlight || highlight.length < 3) {
+ return done();
+ }
+
+ delete opt.highlight;
+
+ if (!pending) return done();
+
+ for (; i < tokens.length; i++) {
+ (function(token) {
+ if (token.type !== 'code') {
+ return --pending || done();
+ }
+ return highlight(token.text, token.lang, function(err, code) {
+ if (code == null || code === token.text) {
+ return --pending || done();
+ }
+ token.text = code;
+ token.escaped = true;
+ --pending || done();
+ });
+ })(tokens[i]);
+ }
+
+ return;
+ }
+ try {
+ if (opt) opt = merge({}, marked.defaults, opt);
+ return Parser.parse(Lexer.lex(src, opt), opt);
+ } catch (e) {
+ e.message += '\nPlease report this to https://github.com/chjj/marked.';
+ if ((opt || marked.defaults).silent) {
+ return '<p>An error occured:</p><pre>'
+ + escape(e.message + '', true)
+ + '</pre>';
+ }
+ throw e;
+ }
+}
+
+/**
+ * Options
+ */
+
+marked.options =
+marked.setOptions = function(opt) {
+ merge(marked.defaults, opt);
+ return marked;
+};
+
+marked.defaults = {
+ gfm: true,
+ tables: true,
+ breaks: false,
+ pedantic: false,
+ sanitize: false,
+ smartLists: false,
+ silent: false,
+ highlight: null,
+ langPrefix: 'lang-',
+ smartypants: false,
+ headerPrefix: '',
+ renderer: new Renderer,
+ xhtml: false
+};
+
+/**
+ * Expose
+ */
+
+marked.Parser = Parser;
+marked.parser = Parser.parse;
+
+marked.Renderer = Renderer;
+
+marked.Lexer = Lexer;
+marked.lexer = Lexer.lex;
+
+marked.InlineLexer = InlineLexer;
+marked.inlineLexer = InlineLexer.output;
+
+marked.parse = marked;
+
+if (typeof exports === 'object') {
+ module.exports = marked;
+} else if (typeof define === 'function' && define.amd) {
+ define(function() { return marked; });
+} else {
+ this.marked = marked;
+}
+
+}).call(function() {
+ return this || (typeof window !== 'undefined' ? window : global);
+}());
diff --git a/GitCandy.Web/Views/_ViewStart.cshtml b/GitCandy.Web/Views/_ViewStart.cshtml
new file mode 100644
index 0000000..efda124
--- /dev/null
+++ b/GitCandy.Web/Views/_ViewStart.cshtml
@@ -0,0 +1,3 @@
+@{
+ Layout = "~/Views/Shared/_Layout.cshtml";
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Views/_ViewStart.generated.cs b/GitCandy.Web/Views/_ViewStart.generated.cs
new file mode 100644
index 0000000..33a517e
--- /dev/null
+++ b/GitCandy.Web/Views/_ViewStart.generated.cs
@@ -0,0 +1,63 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/_ViewStart.cshtml")]
+ public partial class _Views__ViewStart_cshtml : System.Web.Mvc.ViewStartPage
+ {
+ public _Views__ViewStart_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 1 "..\..\Views\_ViewStart.cshtml"
+
+ Layout = "~/Views/Shared/_Layout.cshtml";
+
+
+ #line default
+ #line hidden
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Account/Change.cshtml b/GitCandy.Web/Views/Account/Change.cshtml
new file mode 100644
index 0000000..7a9e54f
--- /dev/null
+++ b/GitCandy.Web/Views/Account/Change.cshtml
@@ -0,0 +1,41 @@
+@model GitCandy.Models.ChangePasswordModel
+
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, SR.Account_ChangePasswordTitle);
+}
+
+<h3>@SR.Account_ChangePasswordTitle</h3>
+
+@using (Html.BeginForm("Change", "Account", FormMethod.Post))
+{
+ <dl class="dl-horizontal">
+ <dt>@Html.DisplayNameFor(s => s.OldPassword)</dt>
+ <dd>@Html.PasswordFor(s => s.OldPassword, new { @class = "form-control" })</dd>
+ <dd>
+ <span class="text-danger">
+ @Html.ValidationMessageFor(s => s.OldPassword)
+ </span>
+ </dd>
+
+ <dt>@Html.DisplayNameFor(s => s.NewPassword)</dt>
+ <dd>@Html.PasswordFor(s => s.NewPassword, new { @class = "form-control" })</dd>
+ <dd>
+ <span class="text-danger">
+ @Html.ValidationMessageFor(s => s.NewPassword)
+ </span>
+ </dd>
+
+ <dt>@Html.DisplayNameFor(s => s.ConformPassword)</dt>
+ <dd>@Html.PasswordFor(s => s.ConformPassword, new { @class = "form-control" })</dd>
+ <dd>
+ <span class="text-danger">
+ @Html.ValidationMessageFor(s => s.ConformPassword)
+ </span>
+ </dd>
+
+ <dt></dt>
+ <dd>
+ <button type="submit" class="btn btn-primary">@SR.Account_ChangePassword</button>
+ </dd>
+ </dl>
+}
diff --git a/GitCandy.Web/Views/Account/Change.generated.cs b/GitCandy.Web/Views/Account/Change.generated.cs
new file mode 100644
index 0000000..a3dd2b1
--- /dev/null
+++ b/GitCandy.Web/Views/Account/Change.generated.cs
@@ -0,0 +1,210 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Account/Change.cshtml")]
+ public partial class _Views_Account_Change_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.ChangePasswordModel>
+ {
+ public _Views_Account_Change_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 3 "..\..\Views\Account\Change.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, SR.Account_ChangePasswordTitle);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<h3>");
+
+
+ #line 7 "..\..\Views\Account\Change.cshtml"
+Write(SR.Account_ChangePasswordTitle);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h3>\r\n\r\n");
+
+
+ #line 9 "..\..\Views\Account\Change.cshtml"
+ using (Html.BeginForm("Change", "Account", FormMethod.Post))
+{
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <dl");
+
+WriteLiteral(" class=\"dl-horizontal\"");
+
+WriteLiteral(">\r\n <dt>");
+
+
+ #line 12 "..\..\Views\Account\Change.cshtml"
+ Write(Html.DisplayNameFor(s => s.OldPassword));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 13 "..\..\Views\Account\Change.cshtml"
+ Write(Html.PasswordFor(s => s.OldPassword, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n <dd>\r\n <span");
+
+WriteLiteral(" class=\"text-danger\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 16 "..\..\Views\Account\Change.cshtml"
+ Write(Html.ValidationMessageFor(s => s.OldPassword));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </span>\r\n </dd>\r\n\r\n <dt>");
+
+
+ #line 20 "..\..\Views\Account\Change.cshtml"
+ Write(Html.DisplayNameFor(s => s.NewPassword));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 21 "..\..\Views\Account\Change.cshtml"
+ Write(Html.PasswordFor(s => s.NewPassword, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n <dd>\r\n <span");
+
+WriteLiteral(" class=\"text-danger\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 24 "..\..\Views\Account\Change.cshtml"
+ Write(Html.ValidationMessageFor(s => s.NewPassword));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </span>\r\n </dd>\r\n\r\n <dt>");
+
+
+ #line 28 "..\..\Views\Account\Change.cshtml"
+ Write(Html.DisplayNameFor(s => s.ConformPassword));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 29 "..\..\Views\Account\Change.cshtml"
+ Write(Html.PasswordFor(s => s.ConformPassword, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n <dd>\r\n <span");
+
+WriteLiteral(" class=\"text-danger\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 32 "..\..\Views\Account\Change.cshtml"
+ Write(Html.ValidationMessageFor(s => s.ConformPassword));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </span>\r\n </dd>\r\n\r\n <dt></dt>\r\n <dd>\r\n " +
+" <button");
+
+WriteLiteral(" type=\"submit\"");
+
+WriteLiteral(" class=\"btn btn-primary\"");
+
+WriteLiteral(">");
+
+
+ #line 38 "..\..\Views\Account\Change.cshtml"
+ Write(SR.Account_ChangePassword);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</button>\r\n </dd>\r\n </dl>\r\n");
+
+
+ #line 41 "..\..\Views\Account\Change.cshtml"
+}
+
+
+ #line default
+ #line hidden
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Account/Create.cshtml b/GitCandy.Web/Views/Account/Create.cshtml
new file mode 100644
index 0000000..c0813b9
--- /dev/null
+++ b/GitCandy.Web/Views/Account/Create.cshtml
@@ -0,0 +1,71 @@
+@model GitCandy.Models.UserModel
+
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, SR.Account_CreateTitle);
+}
+
+<h3>@SR.Account_CreateTitle</h3>
+
+
+@using (Html.BeginForm("Create", "Account", FormMethod.Post))
+{
+ <dl class="dl-horizontal col-md-8">
+
+ <dt>@Html.DisplayNameFor(s => s.Name)</dt>
+ <dd>@Html.TextBoxFor(s => s.Name, new { @class = "form-control" })</dd>
+ <dd>
+ <span class="text-danger">
+ @Html.ValidationMessageFor(s => s.Name)
+ </span>
+ </dd>
+
+ <dt>@Html.DisplayNameFor(s => s.Nickname)</dt>
+ <dd>@Html.TextBoxFor(s => s.Nickname, new { @class = "form-control" })</dd>
+ <dd>
+ <span class="text-danger">
+ @Html.ValidationMessageFor(s => s.Nickname)
+ </span>
+ </dd>
+
+ <dt>@Html.DisplayNameFor(s => s.Password)</dt>
+ <dd>@Html.PasswordFor(s => s.Password, new { @class = "form-control" })</dd>
+ <dd>
+ <span class="text-danger">
+ @Html.ValidationMessageFor(s => s.Password)
+ </span>
+ </dd>
+
+ <dt>@Html.DisplayNameFor(s => s.ConformPassword)</dt>
+ <dd>@Html.PasswordFor(s => s.ConformPassword, new { @class = "form-control" })</dd>
+ <dd>
+ <span class="text-danger">
+ @Html.ValidationMessageFor(s => s.ConformPassword)
+ </span>
+ </dd>
+
+ <dt>@Html.DisplayNameFor(s => s.Email)</dt>
+ <dd>@Html.TextBoxFor(s => s.Email, new { @class = "form-control" })</dd>
+ <dd>
+ <span class="text-danger">
+ @Html.ValidationMessageFor(s => s.Email)
+ </span>
+ </dd>
+
+ <dt>@Html.DisplayNameFor(s => s.Description)</dt>
+ <dd>@Html.TextAreaFor(s => s.Description, 4, 0, new { @class = "form-control" })</dd>
+ <dd>
+ <span class="text-danger">
+ @Html.ValidationMessageFor(s => s.Description)
+ </span>
+ </dd>
+
+ <dt></dt>
+ <dd>@Html.ValidationSummary(true, SR.Account_CreationUnsuccessfull, new { @class = "alert alert-dismissable alert-danger" })</dd>
+
+ <dt></dt>
+ <dd>
+ <button type="submit" class="btn btn-primary">@SR.Shared_Create</button>
+ <button type="reset" class="btn btn-inverse">@SR.Shared_Reset</button>
+ </dd>
+ </dl>
+}
diff --git a/GitCandy.Web/Views/Account/Create.generated.cs b/GitCandy.Web/Views/Account/Create.generated.cs
new file mode 100644
index 0000000..18e6be2
--- /dev/null
+++ b/GitCandy.Web/Views/Account/Create.generated.cs
@@ -0,0 +1,332 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Account/Create.cshtml")]
+ public partial class _Views_Account_Create_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.UserModel>
+ {
+ public _Views_Account_Create_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 3 "..\..\Views\Account\Create.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, SR.Account_CreateTitle);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<h3>");
+
+
+ #line 7 "..\..\Views\Account\Create.cshtml"
+Write(SR.Account_CreateTitle);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h3>\r\n\r\n\r\n");
+
+
+ #line 10 "..\..\Views\Account\Create.cshtml"
+ using (Html.BeginForm("Create", "Account", FormMethod.Post))
+{
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <dl");
+
+WriteLiteral(" class=\"dl-horizontal col-md-8\"");
+
+WriteLiteral(">\r\n\r\n <dt>");
+
+
+ #line 14 "..\..\Views\Account\Create.cshtml"
+ Write(Html.DisplayNameFor(s => s.Name));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 15 "..\..\Views\Account\Create.cshtml"
+ Write(Html.TextBoxFor(s => s.Name, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n <dd>\r\n <span");
+
+WriteLiteral(" class=\"text-danger\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 18 "..\..\Views\Account\Create.cshtml"
+ Write(Html.ValidationMessageFor(s => s.Name));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </span>\r\n </dd>\r\n\r\n <dt>");
+
+
+ #line 22 "..\..\Views\Account\Create.cshtml"
+ Write(Html.DisplayNameFor(s => s.Nickname));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 23 "..\..\Views\Account\Create.cshtml"
+ Write(Html.TextBoxFor(s => s.Nickname, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n <dd>\r\n <span");
+
+WriteLiteral(" class=\"text-danger\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 26 "..\..\Views\Account\Create.cshtml"
+ Write(Html.ValidationMessageFor(s => s.Nickname));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </span>\r\n </dd>\r\n\r\n <dt>");
+
+
+ #line 30 "..\..\Views\Account\Create.cshtml"
+ Write(Html.DisplayNameFor(s => s.Password));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 31 "..\..\Views\Account\Create.cshtml"
+ Write(Html.PasswordFor(s => s.Password, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n <dd>\r\n <span");
+
+WriteLiteral(" class=\"text-danger\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 34 "..\..\Views\Account\Create.cshtml"
+ Write(Html.ValidationMessageFor(s => s.Password));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </span>\r\n </dd>\r\n\r\n <dt>");
+
+
+ #line 38 "..\..\Views\Account\Create.cshtml"
+ Write(Html.DisplayNameFor(s => s.ConformPassword));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 39 "..\..\Views\Account\Create.cshtml"
+ Write(Html.PasswordFor(s => s.ConformPassword, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n <dd>\r\n <span");
+
+WriteLiteral(" class=\"text-danger\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 42 "..\..\Views\Account\Create.cshtml"
+ Write(Html.ValidationMessageFor(s => s.ConformPassword));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </span>\r\n </dd>\r\n\r\n <dt>");
+
+
+ #line 46 "..\..\Views\Account\Create.cshtml"
+ Write(Html.DisplayNameFor(s => s.Email));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 47 "..\..\Views\Account\Create.cshtml"
+ Write(Html.TextBoxFor(s => s.Email, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n <dd>\r\n <span");
+
+WriteLiteral(" class=\"text-danger\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 50 "..\..\Views\Account\Create.cshtml"
+ Write(Html.ValidationMessageFor(s => s.Email));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </span>\r\n </dd>\r\n\r\n <dt>");
+
+
+ #line 54 "..\..\Views\Account\Create.cshtml"
+ Write(Html.DisplayNameFor(s => s.Description));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 55 "..\..\Views\Account\Create.cshtml"
+ Write(Html.TextAreaFor(s => s.Description, 4, 0, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n <dd>\r\n <span");
+
+WriteLiteral(" class=\"text-danger\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 58 "..\..\Views\Account\Create.cshtml"
+ Write(Html.ValidationMessageFor(s => s.Description));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </span>\r\n </dd>\r\n\r\n <dt></dt>\r\n <dd>");
+
+
+ #line 63 "..\..\Views\Account\Create.cshtml"
+ Write(Html.ValidationSummary(true, SR.Account_CreationUnsuccessfull, new { @class = "alert alert-dismissable alert-danger" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt></dt>\r\n <dd>\r\n <button");
+
+WriteLiteral(" type=\"submit\"");
+
+WriteLiteral(" class=\"btn btn-primary\"");
+
+WriteLiteral(">");
+
+
+ #line 67 "..\..\Views\Account\Create.cshtml"
+ Write(SR.Shared_Create);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</button> \r\n <button");
+
+WriteLiteral(" type=\"reset\"");
+
+WriteLiteral(" class=\"btn btn-inverse\"");
+
+WriteLiteral(">");
+
+
+ #line 68 "..\..\Views\Account\Create.cshtml"
+ Write(SR.Shared_Reset);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</button> \r\n </dd>\r\n </dl>\r\n");
+
+
+ #line 71 "..\..\Views\Account\Create.cshtml"
+}
+
+
+ #line default
+ #line hidden
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Account/Delete.cshtml b/GitCandy.Web/Views/Account/Delete.cshtml
new file mode 100644
index 0000000..4de7ba6
--- /dev/null
+++ b/GitCandy.Web/Views/Account/Delete.cshtml
@@ -0,0 +1,23 @@
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Account_DeleteTitle, Model));
+}
+
+<div class="panel panel-danger">
+ <div class="panel-heading">
+ <h4 class="panel-title">@SR.Shared_Conform</h4>
+ </div>
+ <div class="panel-body">
+ @String.Format(SR.Account_DeletionWords, Model)
+ </div>
+</div>
+
+@Html.ValidationSummary(true, "", new { @class = "alert alert-error" })
+
+<div>
+ <div class="pull-left">
+ @Html.ActionLink(SR.Shared_Back, "Detail", "Account", new { name = Model }, new { @class = "btn btn-default" })
+ </div>
+ <div class="pull-right">
+ @Html.ActionLink(SR.Shared_Delete, "Delete", "Account", new { name = Model, Conform = "Yes" }, new { @class = "btn btn-danger" })
+ </div>
+</div>
diff --git a/GitCandy.Web/Views/Account/Delete.generated.cs b/GitCandy.Web/Views/Account/Delete.generated.cs
new file mode 100644
index 0000000..2b0a9e2
--- /dev/null
+++ b/GitCandy.Web/Views/Account/Delete.generated.cs
@@ -0,0 +1,140 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Account/Delete.cshtml")]
+ public partial class _Views_Account_Delete_cshtml : System.Web.Mvc.WebViewPage<dynamic>
+ {
+ public _Views_Account_Delete_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 1 "..\..\Views\Account\Delete.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Account_DeleteTitle, Model));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<div");
+
+WriteLiteral(" class=\"panel panel-danger\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"panel-heading\"");
+
+WriteLiteral(">\r\n <h4");
+
+WriteLiteral(" class=\"panel-title\"");
+
+WriteLiteral(">");
+
+
+ #line 7 "..\..\Views\Account\Delete.cshtml"
+ Write(SR.Shared_Conform);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h4>\r\n </div>\r\n <div");
+
+WriteLiteral(" class=\"panel-body\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 10 "..\..\Views\Account\Delete.cshtml"
+ Write(String.Format(SR.Account_DeletionWords, Model));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n</div>\r\n\r\n");
+
+
+ #line 14 "..\..\Views\Account\Delete.cshtml"
+Write(Html.ValidationSummary(true, "", new { @class = "alert alert-error" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<div>\r\n <div");
+
+WriteLiteral(" class=\"pull-left\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 18 "..\..\Views\Account\Delete.cshtml"
+ Write(Html.ActionLink(SR.Shared_Back, "Detail", "Account", new { name = Model }, new { @class = "btn btn-default" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n <div");
+
+WriteLiteral(" class=\"pull-right\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 21 "..\..\Views\Account\Delete.cshtml"
+ Write(Html.ActionLink(SR.Shared_Delete, "Delete", "Account", new { name = Model, Conform = "Yes" }, new { @class = "btn btn-danger" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n</div>\r\n");
+
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Account/Detail.cshtml b/GitCandy.Web/Views/Account/Detail.cshtml
new file mode 100644
index 0000000..bd31414
--- /dev/null
+++ b/GitCandy.Web/Views/Account/Detail.cshtml
@@ -0,0 +1,47 @@
+@model GitCandy.Models.UserModel
+
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Account_DetailTitle, Model.Name));
+ var token = GitCandy.Security.Token.Current;
+}
+<h3>@String.Format(SR.Account_DetailTitle, Model.Name)</h3>
+
+@if (Model != null)
+{
+ <dl class="dl-horizontal">
+
+ <dt>@Html.DisplayNameFor(s => s.Name)</dt>
+ <dd>@Model.Name</dd>
+
+ <dt>@Html.DisplayNameFor(s => s.Nickname)</dt>
+ <dd>@Model.Nickname</dd>
+
+ <dt>@Html.DisplayNameFor(s => s.Email)</dt>
+ <dd>@Model.Email</dd>
+
+ <dt>@Html.DisplayNameFor(s => s.Respositories)</dt>
+ <dd>@Html.DisplayFor(s => s.Respositories)</dd>
+
+ <dt>@Html.DisplayNameFor(s => s.Teams)</dt>
+ <dd>@Html.DisplayFor(s => s.Teams)</dd>
+
+ <dt>@Html.DisplayNameFor(s => s.Description)</dt>
+ <dd>@Model.Description</dd>
+
+ @if (token != null && token.IsSystemAdministrator)
+ {
+ <dt>@Html.DisplayNameFor(s => s.IsSystemAdministrator)</dt>
+ <dd>@Html.DisplayFor(s => s.IsSystemAdministrator)</dd>
+ }
+
+ @if (token != null && (token.Username == Model.Name || token.IsSystemAdministrator))
+ {
+ <dt></dt>
+ <dd>
+ @Html.ActionLink(SR.Shared_Edit, "Edit", new { Model.Name }, new { @class = "btn btn-primary" })
+ @Html.ActionLink(SR.Account_SSH, "Ssh", new { Model.Name }, new { @class = "btn btn-info" })
+ @Html.ActionLink(SR.Account_ChangePassword, "Change", new { Model.Name }, new { @class = "btn btn-info" })
+ </dd>
+ }
+ </dl>
+}
diff --git a/GitCandy.Web/Views/Account/Detail.generated.cs b/GitCandy.Web/Views/Account/Detail.generated.cs
new file mode 100644
index 0000000..3591432
--- /dev/null
+++ b/GitCandy.Web/Views/Account/Detail.generated.cs
@@ -0,0 +1,309 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Account/Detail.cshtml")]
+ public partial class _Views_Account_Detail_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.UserModel>
+ {
+ public _Views_Account_Detail_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 3 "..\..\Views\Account\Detail.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Account_DetailTitle, Model.Name));
+ var token = GitCandy.Security.Token.Current;
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n<h3>");
+
+
+ #line 7 "..\..\Views\Account\Detail.cshtml"
+Write(String.Format(SR.Account_DetailTitle, Model.Name));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h3>\r\n\r\n");
+
+
+ #line 9 "..\..\Views\Account\Detail.cshtml"
+ if (Model != null)
+{
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <dl");
+
+WriteLiteral(" class=\"dl-horizontal\"");
+
+WriteLiteral(">\r\n\r\n <dt>");
+
+
+ #line 13 "..\..\Views\Account\Detail.cshtml"
+ Write(Html.DisplayNameFor(s => s.Name));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 14 "..\..\Views\Account\Detail.cshtml"
+ Write(Model.Name);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt>");
+
+
+ #line 16 "..\..\Views\Account\Detail.cshtml"
+ Write(Html.DisplayNameFor(s => s.Nickname));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 17 "..\..\Views\Account\Detail.cshtml"
+ Write(Model.Nickname);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt>");
+
+
+ #line 19 "..\..\Views\Account\Detail.cshtml"
+ Write(Html.DisplayNameFor(s => s.Email));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 20 "..\..\Views\Account\Detail.cshtml"
+ Write(Model.Email);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt>");
+
+
+ #line 22 "..\..\Views\Account\Detail.cshtml"
+ Write(Html.DisplayNameFor(s => s.Respositories));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 23 "..\..\Views\Account\Detail.cshtml"
+ Write(Html.DisplayFor(s => s.Respositories));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt>");
+
+
+ #line 25 "..\..\Views\Account\Detail.cshtml"
+ Write(Html.DisplayNameFor(s => s.Teams));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 26 "..\..\Views\Account\Detail.cshtml"
+ Write(Html.DisplayFor(s => s.Teams));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt>");
+
+
+ #line 28 "..\..\Views\Account\Detail.cshtml"
+ Write(Html.DisplayNameFor(s => s.Description));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 29 "..\..\Views\Account\Detail.cshtml"
+ Write(Model.Description);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n");
+
+
+ #line 31 "..\..\Views\Account\Detail.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 31 "..\..\Views\Account\Detail.cshtml"
+ if (token != null && token.IsSystemAdministrator)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <dt>");
+
+
+ #line 33 "..\..\Views\Account\Detail.cshtml"
+ Write(Html.DisplayNameFor(s => s.IsSystemAdministrator));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n");
+
+WriteLiteral(" <dd>");
+
+
+ #line 34 "..\..\Views\Account\Detail.cshtml"
+ Write(Html.DisplayFor(s => s.IsSystemAdministrator));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n");
+
+
+ #line 35 "..\..\Views\Account\Detail.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n");
+
+
+ #line 37 "..\..\Views\Account\Detail.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 37 "..\..\Views\Account\Detail.cshtml"
+ if (token != null && (token.Username == Model.Name || token.IsSystemAdministrator))
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <dt></dt>\r\n");
+
+WriteLiteral(" <dd>\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 41 "..\..\Views\Account\Detail.cshtml"
+ Write(Html.ActionLink(SR.Shared_Edit, "Edit", new { Model.Name }, new { @class = "btn btn-primary" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 42 "..\..\Views\Account\Detail.cshtml"
+ Write(Html.ActionLink(SR.Account_SSH, "Ssh", new { Model.Name }, new { @class = "btn btn-info" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 43 "..\..\Views\Account\Detail.cshtml"
+ Write(Html.ActionLink(SR.Account_ChangePassword, "Change", new { Model.Name }, new { @class = "btn btn-info" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </dd>\r\n");
+
+
+ #line 45 "..\..\Views\Account\Detail.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" </dl>\r\n");
+
+
+ #line 47 "..\..\Views\Account\Detail.cshtml"
+}
+
+
+ #line default
+ #line hidden
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Account/Edit.cshtml b/GitCandy.Web/Views/Account/Edit.cshtml
new file mode 100644
index 0000000..f543aeb
--- /dev/null
+++ b/GitCandy.Web/Views/Account/Edit.cshtml
@@ -0,0 +1,77 @@
+@model GitCandy.Models.UserModel
+
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Account_EditTitle, Model.Name));
+ var token = GitCandy.Security.Token.Current;
+}
+
+<h3>@String.Format(SR.Account_EditTitle, Model.Name)</h3>
+
+
+@using (Html.BeginForm("Edit", "Account", FormMethod.Post))
+{
+ <dl class="dl-horizontal col-md-8">
+ <dt>@Html.DisplayNameFor(s => s.Name)</dt>
+ <dd>
+ @Html.HiddenFor(s => s.Name)
+ @Model.Name
+ </dd>
+
+ <dt>@Html.DisplayNameFor(s => s.Password)</dt>
+ <dd>@Html.PasswordFor(s => s.Password, new { @class = "form-control" })</dd>
+ <dd>
+ <span class="text-danger">
+ @Html.ValidationMessageFor(s => s.Password)
+ </span>
+ </dd>
+
+ <dt>@Html.DisplayNameFor(s => s.Nickname)</dt>
+ <dd>@Html.TextBoxFor(s => s.Nickname, new { @class = "form-control" })</dd>
+ <dd>
+ <span class="text-danger">
+ @Html.ValidationMessageFor(s => s.Nickname)
+ </span>
+ </dd>
+
+ <dt>@Html.DisplayNameFor(s => s.Email)</dt>
+ <dd>@Html.TextBoxFor(s => s.Email, new { @class = "form-control" })</dd>
+ <dd>
+ <span class="text-danger">
+ @Html.ValidationMessageFor(s => s.Email)
+ </span>
+ </dd>
+
+ <dt>@Html.DisplayNameFor(s => s.Description)</dt>
+ <dd>@Html.TextAreaFor(s => s.Description, 4, 0, new { @class = "form-control" })</dd>
+ <dd>
+ <span class="text-danger">
+ @Html.ValidationMessageFor(s => s.Description)
+ </span>
+ </dd>
+
+ @if (token.IsSystemAdministrator)
+ {
+ <dt>@Html.DisplayNameFor(s => s.IsSystemAdministrator)</dt>
+ <dd>
+ <div class="switch" data-on-label="@SR.Shared_Yes" data-off-label="@SR.Shared_No">
+ @Html.CheckBoxFor(s => s.IsSystemAdministrator, new { data_size = "small" })
+ </div>
+ </dd>
+ }
+
+ <dt></dt>
+ <dd>@Html.ValidationSummary(true, SR.Account_UpdateUnsuccessfull, new { @class = "alert alert-dismissable alert-danger" })</dd>
+
+ <dt>
+ @Html.ActionLink(SR.Shared_Back, "Detail", new { Model.Name }, new { @class = "btn btn-default pull-left" })
+ </dt>
+ <dd>
+ <button type="submit" class="btn btn-primary">@SR.Shared_Save</button>
+ <button type="reset" class="btn btn-inverse">@SR.Shared_Reset</button>
+ @if (token != null && token.IsSystemAdministrator)
+ {
+ @Html.ActionLink(SR.Shared_Delete, "Delete", new { Model.Name }, new { @class = "btn btn-danger" })
+ }
+ </dd>
+ </dl>
+}
diff --git a/GitCandy.Web/Views/Account/Edit.generated.cs b/GitCandy.Web/Views/Account/Edit.generated.cs
new file mode 100644
index 0000000..c91a8e1
--- /dev/null
+++ b/GitCandy.Web/Views/Account/Edit.generated.cs
@@ -0,0 +1,413 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Account/Edit.cshtml")]
+ public partial class _Views_Account_Edit_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.UserModel>
+ {
+ public _Views_Account_Edit_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 3 "..\..\Views\Account\Edit.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Account_EditTitle, Model.Name));
+ var token = GitCandy.Security.Token.Current;
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<h3>");
+
+
+ #line 8 "..\..\Views\Account\Edit.cshtml"
+Write(String.Format(SR.Account_EditTitle, Model.Name));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h3>\r\n\r\n\r\n");
+
+
+ #line 11 "..\..\Views\Account\Edit.cshtml"
+ using (Html.BeginForm("Edit", "Account", FormMethod.Post))
+{
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <dl");
+
+WriteLiteral(" class=\"dl-horizontal col-md-8\"");
+
+WriteLiteral(">\r\n <dt>");
+
+
+ #line 14 "..\..\Views\Account\Edit.cshtml"
+ Write(Html.DisplayNameFor(s => s.Name));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 16 "..\..\Views\Account\Edit.cshtml"
+ Write(Html.HiddenFor(s => s.Name));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 17 "..\..\Views\Account\Edit.cshtml"
+ Write(Model.Name);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </dd>\r\n\r\n <dt>");
+
+
+ #line 20 "..\..\Views\Account\Edit.cshtml"
+ Write(Html.DisplayNameFor(s => s.Password));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 21 "..\..\Views\Account\Edit.cshtml"
+ Write(Html.PasswordFor(s => s.Password, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n <dd>\r\n <span");
+
+WriteLiteral(" class=\"text-danger\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 24 "..\..\Views\Account\Edit.cshtml"
+ Write(Html.ValidationMessageFor(s => s.Password));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </span>\r\n </dd>\r\n\r\n <dt>");
+
+
+ #line 28 "..\..\Views\Account\Edit.cshtml"
+ Write(Html.DisplayNameFor(s => s.Nickname));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 29 "..\..\Views\Account\Edit.cshtml"
+ Write(Html.TextBoxFor(s => s.Nickname, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n <dd>\r\n <span");
+
+WriteLiteral(" class=\"text-danger\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 32 "..\..\Views\Account\Edit.cshtml"
+ Write(Html.ValidationMessageFor(s => s.Nickname));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </span>\r\n </dd>\r\n\r\n <dt>");
+
+
+ #line 36 "..\..\Views\Account\Edit.cshtml"
+ Write(Html.DisplayNameFor(s => s.Email));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 37 "..\..\Views\Account\Edit.cshtml"
+ Write(Html.TextBoxFor(s => s.Email, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n <dd>\r\n <span");
+
+WriteLiteral(" class=\"text-danger\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 40 "..\..\Views\Account\Edit.cshtml"
+ Write(Html.ValidationMessageFor(s => s.Email));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </span>\r\n </dd>\r\n\r\n <dt>");
+
+
+ #line 44 "..\..\Views\Account\Edit.cshtml"
+ Write(Html.DisplayNameFor(s => s.Description));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 45 "..\..\Views\Account\Edit.cshtml"
+ Write(Html.TextAreaFor(s => s.Description, 4, 0, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n <dd>\r\n <span");
+
+WriteLiteral(" class=\"text-danger\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 48 "..\..\Views\Account\Edit.cshtml"
+ Write(Html.ValidationMessageFor(s => s.Description));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </span>\r\n </dd>\r\n\r\n");
+
+
+ #line 52 "..\..\Views\Account\Edit.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 52 "..\..\Views\Account\Edit.cshtml"
+ if (token.IsSystemAdministrator)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <dt>");
+
+
+ #line 54 "..\..\Views\Account\Edit.cshtml"
+ Write(Html.DisplayNameFor(s => s.IsSystemAdministrator));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n");
+
+WriteLiteral(" <dd>\r\n <div");
+
+WriteLiteral(" class=\"switch\"");
+
+WriteLiteral(" data-on-label=\"");
+
+
+ #line 56 "..\..\Views\Account\Edit.cshtml"
+ Write(SR.Shared_Yes);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral(" data-off-label=\"");
+
+
+ #line 56 "..\..\Views\Account\Edit.cshtml"
+ Write(SR.Shared_No);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 57 "..\..\Views\Account\Edit.cshtml"
+ Write(Html.CheckBoxFor(s => s.IsSystemAdministrator, new { data_size = "small" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n </dd>\r\n");
+
+
+ #line 60 "..\..\Views\Account\Edit.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n <dt></dt>\r\n <dd>");
+
+
+ #line 63 "..\..\Views\Account\Edit.cshtml"
+ Write(Html.ValidationSummary(true, SR.Account_UpdateUnsuccessfull, new { @class = "alert alert-dismissable alert-danger" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt>\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 66 "..\..\Views\Account\Edit.cshtml"
+ Write(Html.ActionLink(SR.Shared_Back, "Detail", new { Model.Name }, new { @class = "btn btn-default pull-left" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </dt>\r\n <dd>\r\n <button");
+
+WriteLiteral(" type=\"submit\"");
+
+WriteLiteral(" class=\"btn btn-primary\"");
+
+WriteLiteral(">");
+
+
+ #line 69 "..\..\Views\Account\Edit.cshtml"
+ Write(SR.Shared_Save);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</button> \r\n <button");
+
+WriteLiteral(" type=\"reset\"");
+
+WriteLiteral(" class=\"btn btn-inverse\"");
+
+WriteLiteral(">");
+
+
+ #line 70 "..\..\Views\Account\Edit.cshtml"
+ Write(SR.Shared_Reset);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</button> \r\n");
+
+
+ #line 71 "..\..\Views\Account\Edit.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 71 "..\..\Views\Account\Edit.cshtml"
+ if (token != null && token.IsSystemAdministrator)
+ {
+
+
+ #line default
+ #line hidden
+
+ #line 73 "..\..\Views\Account\Edit.cshtml"
+ Write(Html.ActionLink(SR.Shared_Delete, "Delete", new { Model.Name }, new { @class = "btn btn-danger" }));
+
+
+ #line default
+ #line hidden
+
+ #line 73 "..\..\Views\Account\Edit.cshtml"
+
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" </dd>\r\n </dl>\r\n");
+
+
+ #line 77 "..\..\Views\Account\Edit.cshtml"
+}
+
+
+ #line default
+ #line hidden
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Account/Forgot.cshtml b/GitCandy.Web/Views/Account/Forgot.cshtml
new file mode 100644
index 0000000..6f81e20
--- /dev/null
+++ b/GitCandy.Web/Views/Account/Forgot.cshtml
@@ -0,0 +1,7 @@
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, SR.Account_ForgotTitle);
+}
+
+<h4>@SR.Account_ForgotTitle</h4>
+
+<h2 class="center">Please contact with administrator!</h2>
diff --git a/GitCandy.Web/Views/Account/Forgot.generated.cs b/GitCandy.Web/Views/Account/Forgot.generated.cs
new file mode 100644
index 0000000..e8859c5
--- /dev/null
+++ b/GitCandy.Web/Views/Account/Forgot.generated.cs
@@ -0,0 +1,78 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Account/Forgot.cshtml")]
+ public partial class _Views_Account_Forgot_cshtml : System.Web.Mvc.WebViewPage<dynamic>
+ {
+ public _Views_Account_Forgot_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 1 "..\..\Views\Account\Forgot.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, SR.Account_ForgotTitle);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<h4>");
+
+
+ #line 5 "..\..\Views\Account\Forgot.cshtml"
+Write(SR.Account_ForgotTitle);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h4>\r\n\r\n<h2");
+
+WriteLiteral(" class=\"center\"");
+
+WriteLiteral(">Please contact with administrator!</h2>\r\n");
+
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Account/Index.cshtml b/GitCandy.Web/Views/Account/Index.cshtml
new file mode 100644
index 0000000..9446bb7
--- /dev/null
+++ b/GitCandy.Web/Views/Account/Index.cshtml
@@ -0,0 +1,48 @@
+@model GitCandy.Models.UserListModel
+
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, SR.Account_ListTitle);
+}
+
+<h4>@SR.Account_ListTitle</h4>
+
+@using (Html.BeginForm("Index", "Account", FormMethod.Get))
+{
+<div class="row">
+ <div class="form-group col-md-5">
+ <div class="input-group">
+ <input type="text" name="query" class="form-control" />
+ <span class="input-group-btn">
+ <button type="submit" class="btn btn-default">@SR.Shared_Search</button>
+ </span>
+ </div>
+ </div>
+</div>
+}
+
+<div>
+ <div class="pull-left">@String.Format(SR.Account_UsersFound, Model.ItemCount)</div>
+ <div class="pull-right">@Html.ActionLink(SR.Shared_Create, "Create", null, new { @class = "btn btn-primary" })</div>
+</div>
+<table class="table table-hover table-striped">
+ <thead>
+ <tr>
+ <th>@SR.Account_Username</th>
+ <th>@SR.Account_Nickname</th>
+ <th>@SR.Account_Email</th>
+ <th>@SR.Account_IsSystemAdministrator</th>
+ </tr>
+ </thead>
+ <tbody>
+ @foreach (var item in Model.Users)
+ {
+ <tr>
+ <td>@Html.ActionLink(item.Name, "Detail", new { name = item.Name })</td>
+ <td>@item.Nickname</td>
+ <td>@item.Email</td>
+ <td>@item.IsSystemAdministrator.ToFlagString(SR.Shared_Yes, SR.Shared_No)</td>
+ </tr>
+ }
+ </tbody>
+</table>
+@Html.Partial("_Pager")
\ No newline at end of file
diff --git a/GitCandy.Web/Views/Account/Index.generated.cs b/GitCandy.Web/Views/Account/Index.generated.cs
new file mode 100644
index 0000000..12dc1d9
--- /dev/null
+++ b/GitCandy.Web/Views/Account/Index.generated.cs
@@ -0,0 +1,266 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Account/Index.cshtml")]
+ public partial class _Views_Account_Index_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.UserListModel>
+ {
+ public _Views_Account_Index_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 3 "..\..\Views\Account\Index.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, SR.Account_ListTitle);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<h4>");
+
+
+ #line 7 "..\..\Views\Account\Index.cshtml"
+Write(SR.Account_ListTitle);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h4>\r\n\r\n");
+
+
+ #line 9 "..\..\Views\Account\Index.cshtml"
+ using (Html.BeginForm("Index", "Account", FormMethod.Get))
+{
+
+
+ #line default
+ #line hidden
+WriteLiteral("<div");
+
+WriteLiteral(" class=\"row\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"form-group col-md-5\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"input-group\"");
+
+WriteLiteral(">\r\n <input");
+
+WriteLiteral(" type=\"text\"");
+
+WriteLiteral(" name=\"query\"");
+
+WriteLiteral(" class=\"form-control\"");
+
+WriteLiteral(" />\r\n <span");
+
+WriteLiteral(" class=\"input-group-btn\"");
+
+WriteLiteral(">\r\n <button");
+
+WriteLiteral(" type=\"submit\"");
+
+WriteLiteral(" class=\"btn btn-default\"");
+
+WriteLiteral(">");
+
+
+ #line 16 "..\..\Views\Account\Index.cshtml"
+ Write(SR.Shared_Search);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</button>\r\n </span>\r\n </div>\r\n </div>\r\n</div>\r\n");
+
+
+ #line 21 "..\..\Views\Account\Index.cshtml"
+}
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n<div>\r\n <div");
+
+WriteLiteral(" class=\"pull-left\"");
+
+WriteLiteral(">");
+
+
+ #line 24 "..\..\Views\Account\Index.cshtml"
+ Write(String.Format(SR.Account_UsersFound, Model.ItemCount));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n <div");
+
+WriteLiteral(" class=\"pull-right\"");
+
+WriteLiteral(">");
+
+
+ #line 25 "..\..\Views\Account\Index.cshtml"
+ Write(Html.ActionLink(SR.Shared_Create, "Create", null, new { @class = "btn btn-primary" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n</div>\r\n<table");
+
+WriteLiteral(" class=\"table table-hover table-striped\"");
+
+WriteLiteral(">\r\n <thead>\r\n <tr>\r\n <th>");
+
+
+ #line 30 "..\..\Views\Account\Index.cshtml"
+ Write(SR.Account_Username);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</th>\r\n <th>");
+
+
+ #line 31 "..\..\Views\Account\Index.cshtml"
+ Write(SR.Account_Nickname);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</th>\r\n <th>");
+
+
+ #line 32 "..\..\Views\Account\Index.cshtml"
+ Write(SR.Account_Email);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</th>\r\n <th>");
+
+
+ #line 33 "..\..\Views\Account\Index.cshtml"
+ Write(SR.Account_IsSystemAdministrator);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n");
+
+
+ #line 37 "..\..\Views\Account\Index.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 37 "..\..\Views\Account\Index.cshtml"
+ foreach (var item in Model.Users)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <tr>\r\n <td>");
+
+
+ #line 40 "..\..\Views\Account\Index.cshtml"
+ Write(Html.ActionLink(item.Name, "Detail", new { name = item.Name }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td>\r\n <td>");
+
+
+ #line 41 "..\..\Views\Account\Index.cshtml"
+ Write(item.Nickname);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td>\r\n <td>");
+
+
+ #line 42 "..\..\Views\Account\Index.cshtml"
+ Write(item.Email);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td>\r\n <td>");
+
+
+ #line 43 "..\..\Views\Account\Index.cshtml"
+ Write(item.IsSystemAdministrator.ToFlagString(SR.Shared_Yes, SR.Shared_No));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td>\r\n </tr>\r\n");
+
+
+ #line 45 "..\..\Views\Account\Index.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" </tbody>\r\n</table>\r\n");
+
+
+ #line 48 "..\..\Views\Account\Index.cshtml"
+Write(Html.Partial("_Pager"));
+
+
+ #line default
+ #line hidden
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Account/Login.cshtml b/GitCandy.Web/Views/Account/Login.cshtml
new file mode 100644
index 0000000..3fb4a3f
--- /dev/null
+++ b/GitCandy.Web/Views/Account/Login.cshtml
@@ -0,0 +1,27 @@
+@model GitCandy.Models.LoginModel
+
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, SR.Account_LoginTitle);
+}
+
+<h3>@SR.Account_LoginTitle</h3>
+
+@using (Html.BeginForm("Login", "Account", new { ViewBag.ReturnUrl }, FormMethod.Post))
+{
+ <dl class="dl-horizontal col-md-8">
+ <dt>@Html.DisplayNameFor(s => s.ID)</dt>
+ <dd>@Html.TextBoxFor(s => s.ID, new { @class = "form-control" })</dd>
+
+ <dt>@Html.DisplayNameFor(s => s.Password)</dt>
+ <dd>@Html.PasswordFor(s => s.Password, new { @class = "form-control" })</dd>
+
+ <dt></dt>
+ <dd>@Html.ValidationSummary(true, SR.Account_LoginFailed, new { @class = "alert alert-dismissable alert-danger" })</dd>
+
+ <dt></dt>
+ <dd>
+ <button type="submit" class="btn btn-primary">@SR.Shared_Login</button>
+ @Html.ActionLink(SR.Account_ForgotPassword, "Forgot")
+ </dd>
+ </dl>
+}
diff --git a/GitCandy.Web/Views/Account/Login.generated.cs b/GitCandy.Web/Views/Account/Login.generated.cs
new file mode 100644
index 0000000..892e8cf
--- /dev/null
+++ b/GitCandy.Web/Views/Account/Login.generated.cs
@@ -0,0 +1,166 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Account/Login.cshtml")]
+ public partial class _Views_Account_Login_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.LoginModel>
+ {
+ public _Views_Account_Login_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 3 "..\..\Views\Account\Login.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, SR.Account_LoginTitle);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<h3>");
+
+
+ #line 7 "..\..\Views\Account\Login.cshtml"
+Write(SR.Account_LoginTitle);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h3>\r\n\r\n");
+
+
+ #line 9 "..\..\Views\Account\Login.cshtml"
+ using (Html.BeginForm("Login", "Account", new { ViewBag.ReturnUrl }, FormMethod.Post))
+{
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <dl");
+
+WriteLiteral(" class=\"dl-horizontal col-md-8\"");
+
+WriteLiteral(">\r\n <dt>");
+
+
+ #line 12 "..\..\Views\Account\Login.cshtml"
+ Write(Html.DisplayNameFor(s => s.ID));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 13 "..\..\Views\Account\Login.cshtml"
+ Write(Html.TextBoxFor(s => s.ID, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt>");
+
+
+ #line 15 "..\..\Views\Account\Login.cshtml"
+ Write(Html.DisplayNameFor(s => s.Password));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 16 "..\..\Views\Account\Login.cshtml"
+ Write(Html.PasswordFor(s => s.Password, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt></dt>\r\n <dd>");
+
+
+ #line 19 "..\..\Views\Account\Login.cshtml"
+ Write(Html.ValidationSummary(true, SR.Account_LoginFailed, new { @class = "alert alert-dismissable alert-danger" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt></dt>\r\n <dd>\r\n <button");
+
+WriteLiteral(" type=\"submit\"");
+
+WriteLiteral(" class=\"btn btn-primary\"");
+
+WriteLiteral(">");
+
+
+ #line 23 "..\..\Views\Account\Login.cshtml"
+ Write(SR.Shared_Login);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</button>\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 24 "..\..\Views\Account\Login.cshtml"
+ Write(Html.ActionLink(SR.Account_ForgotPassword, "Forgot"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </dd>\r\n </dl>\r\n");
+
+
+ #line 27 "..\..\Views\Account\Login.cshtml"
+}
+
+
+ #line default
+ #line hidden
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Account/Ssh.cshtml b/GitCandy.Web/Views/Account/Ssh.cshtml
new file mode 100644
index 0000000..8897821
--- /dev/null
+++ b/GitCandy.Web/Views/Account/Ssh.cshtml
@@ -0,0 +1,32 @@
+@model GitCandy.Models.SshModel
+@using NewLife.Serialization;
+
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, SR.Account_SshKeys);
+}
+
+<h4>@SR.Account_SshKeys</h4>
+
+@if (Model != null)
+{
+ <span>@SR.Account_SSH</span>
+ <div id="choose_ssh"></div>
+
+ <script type="text/javascript">
+ var user = "@Model.Username";
+ var chooser_params = [];
+ chooser_params.push(
+ {
+ data: @Html.Raw(Model.SshKeys.ToJson()),
+ container: "#choose_ssh",
+ add_label: "@SR.Shared_Add",
+ del_label: "@SR.Shared_Remove",
+ use_ret_val: true,
+ first_width: 5,
+ add_action: { url: "@Url.Action("ChooseSsh", "Account")", query: function (item) { return { user: user, sshkey: item, act: "add" }; } },
+ del_action: { url: "@Url.Action("ChooseSsh", "Account")", query: function (item) { return { user: user, sshkey: item, act: "del" }; } },
+ action_array: []
+ });
+ </script>
+}
+@Html.ActionLink(SR.Shared_Back, "Detail", new { Name = Model.Username }, new { @class = "btn btn-default" })
diff --git a/GitCandy.Web/Views/Account/Ssh.generated.cs b/GitCandy.Web/Views/Account/Ssh.generated.cs
new file mode 100644
index 0000000..1ff076c
--- /dev/null
+++ b/GitCandy.Web/Views/Account/Ssh.generated.cs
@@ -0,0 +1,193 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+
+ #line 2 "..\..\Views\Account\Ssh.cshtml"
+ using NewLife.Serialization;
+
+ #line default
+ #line hidden
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Account/Ssh.cshtml")]
+ public partial class _Views_Account_Ssh_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.SshModel>
+ {
+ public _Views_Account_Ssh_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+WriteLiteral("\r\n");
+
+
+ #line 4 "..\..\Views\Account\Ssh.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, SR.Account_SshKeys);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<h4>");
+
+
+ #line 8 "..\..\Views\Account\Ssh.cshtml"
+Write(SR.Account_SshKeys);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h4>\r\n\r\n");
+
+
+ #line 10 "..\..\Views\Account\Ssh.cshtml"
+ if (Model != null)
+{
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <span>");
+
+
+ #line 12 "..\..\Views\Account\Ssh.cshtml"
+ Write(SR.Account_SSH);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span>\r\n");
+
+WriteLiteral(" <div");
+
+WriteLiteral(" id=\"choose_ssh\"");
+
+WriteLiteral("></div>\r\n");
+
+
+ #line 14 "..\..\Views\Account\Ssh.cshtml"
+
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <script");
+
+WriteLiteral(" type=\"text/javascript\"");
+
+WriteLiteral(">\r\n var user = \"");
+
+
+ #line 16 "..\..\Views\Account\Ssh.cshtml"
+ Write(Model.Username);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\";\r\n var chooser_params = [];\r\n chooser_params.push(\r\n {" +
+"\r\n data: ");
+
+
+ #line 20 "..\..\Views\Account\Ssh.cshtml"
+ Write(Html.Raw(Model.SshKeys.ToJson()));
+
+
+ #line default
+ #line hidden
+WriteLiteral(",\r\n container: \"#choose_ssh\",\r\n add_label: \"");
+
+
+ #line 22 "..\..\Views\Account\Ssh.cshtml"
+ Write(SR.Shared_Add);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\",\r\n del_label: \"");
+
+
+ #line 23 "..\..\Views\Account\Ssh.cshtml"
+ Write(SR.Shared_Remove);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\",\r\n use_ret_val: true,\r\n first_width: 5,\r\n " +
+" add_action: { url: \"");
+
+
+ #line 26 "..\..\Views\Account\Ssh.cshtml"
+ Write(Url.Action("ChooseSsh", "Account"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\", query: function (item) { return { user: user, sshkey: item, act: \"add\" }; } }," +
+"\r\n del_action: { url: \"");
+
+
+ #line 27 "..\..\Views\Account\Ssh.cshtml"
+ Write(Url.Action("ChooseSsh", "Account"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\", query: function (item) { return { user: user, sshkey: item, act: \"del\" }; } }," +
+"\r\n action_array: []\r\n });\r\n </script>\r\n");
+
+
+ #line 31 "..\..\Views\Account\Ssh.cshtml"
+}
+
+
+ #line default
+ #line hidden
+
+ #line 32 "..\..\Views\Account\Ssh.cshtml"
+Write(Html.ActionLink(SR.Shared_Back, "Detail", new { Name = Model.Username }, new { @class = "btn btn-default" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n");
+
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Home/About.cshtml b/GitCandy.Web/Views/Home/About.cshtml
new file mode 100644
index 0000000..ebef863
--- /dev/null
+++ b/GitCandy.Web/Views/Home/About.cshtml
@@ -0,0 +1,30 @@
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, SR.Home_AboutTitle);
+}
+
+<h4>@SR.Home_AboutTitle</h4>
+
+<div id="md">
+@Html.Raw(SR.Home_AboutDescription)
+* [ASP.NET MVC](http://aspnetwebstack.codeplex.com/) @@ [Apache License 2.0](http://aspnetwebstack.codeplex.com/license)
+* [Bootstrap](http://github.com/twbs/bootstrap) @@ [MIT License](http://github.com/twbs/bootstrap/blob/master/LICENSE)
+* [Bootstrap-switch](http://github.com/nostalgiaz/bootstrap-switch) @@ [Apache License 2.0](http://github.com/nostalgiaz/bootstrap-switch/blob/master/LICENSE)
+* [EntityFramework](http://entityframework.codeplex.com/) @@ [Apache License 2.0](http://entityframework.codeplex.com/license)
+* [FxSsh](http://github.com/Aimeast/FxSsh) @@ [MIT license](http://github.com/Aimeast/FxSsh/blob/master/LICENSE.md)
+* [Highlight.js](http://github.com/isagalaev/highlight.js) @@ [New BSD License](http://github.com/isagalaev/highlight.js/blob/master/LICENSE)
+* [jQuery](http://github.com/jquery/jquery) @@ [MIT License](http://github.com/jquery/jquery/blob/master/MIT-LICENSE.txt)
+* [LibGit2Sharp](http://github.com/libgit2/libgit2sharp) @@ [MIT License](http://github.com/libgit2/libgit2sharp/blob/master/LICENSE.md)
+* [marked](http://github.com/chjj/marked) @@ [MIT License](http://github.com/chjj/marked/blob/master/LICENSE)
+* [Microsoft.Composition (MEF2)](http://mef.codeplex.com/) @@ [Microsoft Public License](http://mef.codeplex.com/license)
+* [Newtonsoft.Json](http://json.codeplex.com/) @@ [MIT License](http://json.codeplex.com/license)
+* [SharpZipLib](http://github.com/icsharpcode/SharpZipLib) @@ [GPL License v2](http://github.com/icsharpcode/SharpZipLib/blob/master/doc/COPYING.txt)
+</div>
+<!--
+@AppInfomation.BuildingInformation
+
+Version: @AppInfomation.Version
+
+Tracing: @AppInfomation.DateTimeOffsetFormatedNow
+
+Starting: @AppInfomation.StartingTime
+-->
\ No newline at end of file
diff --git a/GitCandy.Web/Views/Home/About.generated.cs b/GitCandy.Web/Views/Home/About.generated.cs
new file mode 100644
index 0000000..c682900
--- /dev/null
+++ b/GitCandy.Web/Views/Home/About.generated.cs
@@ -0,0 +1,159 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Home/About.cshtml")]
+ public partial class _Views_Home_About_cshtml : System.Web.Mvc.WebViewPage<dynamic>
+ {
+ public _Views_Home_About_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 1 "..\..\Views\Home\About.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, SR.Home_AboutTitle);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<h4>");
+
+
+ #line 5 "..\..\Views\Home\About.cshtml"
+Write(SR.Home_AboutTitle);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h4>\r\n\r\n<div");
+
+WriteLiteral(" id=\"md\"");
+
+WriteLiteral(">\r\n");
+
+
+ #line 8 "..\..\Views\Home\About.cshtml"
+Write(Html.Raw(SR.Home_AboutDescription));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n* [ASP.NET MVC](http://aspnetwebstack.codeplex.com/) ");
+
+WriteLiteral("@ [Apache License 2.0](http://aspnetwebstack.codeplex.com/license)\r\n* [Bootstrap]" +
+"(http://github.com/twbs/bootstrap) ");
+
+WriteLiteral("@ [MIT License](http://github.com/twbs/bootstrap/blob/master/LICENSE)\r\n* [Bootstr" +
+"ap-switch](http://github.com/nostalgiaz/bootstrap-switch) ");
+
+WriteLiteral("@ [Apache License 2.0](http://github.com/nostalgiaz/bootstrap-switch/blob/master/" +
+"LICENSE)\r\n* [EntityFramework](http://entityframework.codeplex.com/) ");
+
+WriteLiteral("@ [Apache License 2.0](http://entityframework.codeplex.com/license)\r\n* [FxSsh](ht" +
+"tp://github.com/Aimeast/FxSsh) ");
+
+WriteLiteral("@ [MIT license](http://github.com/Aimeast/FxSsh/blob/master/LICENSE.md)\r\n* [Highl" +
+"ight.js](http://github.com/isagalaev/highlight.js) ");
+
+WriteLiteral("@ [New BSD License](http://github.com/isagalaev/highlight.js/blob/master/LICENSE)" +
+"\r\n* [jQuery](http://github.com/jquery/jquery) ");
+
+WriteLiteral("@ [MIT License](http://github.com/jquery/jquery/blob/master/MIT-LICENSE.txt)\r\n* [" +
+"LibGit2Sharp](http://github.com/libgit2/libgit2sharp) ");
+
+WriteLiteral("@ [MIT License](http://github.com/libgit2/libgit2sharp/blob/master/LICENSE.md)\r\n*" +
+" [marked](http://github.com/chjj/marked) ");
+
+WriteLiteral("@ [MIT License](http://github.com/chjj/marked/blob/master/LICENSE)\r\n* [Microsoft." +
+"Composition (MEF2)](http://mef.codeplex.com/) ");
+
+WriteLiteral("@ [Microsoft Public License](http://mef.codeplex.com/license)\r\n* [Newtonsoft.Json" +
+"](http://json.codeplex.com/) ");
+
+WriteLiteral("@ [MIT License](http://json.codeplex.com/license)\r\n* [SharpZipLib](http://github." +
+"com/icsharpcode/SharpZipLib) ");
+
+WriteLiteral("@ [GPL License v2](http://github.com/icsharpcode/SharpZipLib/blob/master/doc/COPY" +
+"ING.txt)\r\n</div>\r\n<!--\r\n");
+
+
+ #line 23 "..\..\Views\Home\About.cshtml"
+Write(AppInfomation.BuildingInformation);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\nVersion: ");
+
+
+ #line 25 "..\..\Views\Home\About.cshtml"
+ Write(AppInfomation.Version);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\nTracing: ");
+
+
+ #line 27 "..\..\Views\Home\About.cshtml"
+ Write(AppInfomation.DateTimeOffsetFormatedNow);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\nStarting: ");
+
+
+ #line 29 "..\..\Views\Home\About.cshtml"
+ Write(AppInfomation.StartingTime);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n-->");
+
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Repository/_BlobPreview.cshtml b/GitCandy.Web/Views/Repository/_BlobPreview.cshtml
new file mode 100644
index 0000000..c490d4b
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/_BlobPreview.cshtml
@@ -0,0 +1,21 @@
+@model GitCandy.Models.TreeEntryModel
+
+@if (Model.BlobType == BlobType.Text)
+{
+ <pre><code class="language @Model.TextBrush">@Model.TextContent</code></pre>
+}
+else if (Model.BlobType == BlobType.MarkDown)
+{
+ <div id="md">@Model.TextContent</div>
+}
+else if (Model.BlobType == BlobType.Image)
+{
+ <img alt="@Model.Name" src="@Url.Action("Raw", Html.OverRoute(new { path = (Model.ReferenceName ?? Model.Commit.Sha) + "/" + Model.Path }))" />
+}
+else // Binary
+{
+ <div class="alert alert-block">
+ @SR.Repository_BinaryFileWrods<br />
+ @Html.ActionLink(SR.Repository_Raw, "Raw", Html.OverRoute(new { path = (Model.ReferenceName ?? Model.Commit.Sha) + "/" + Model.Path }))
+ </div>
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Views/Repository/_BlobPreview.generated.cs b/GitCandy.Web/Views/Repository/_BlobPreview.generated.cs
new file mode 100644
index 0000000..89edca6
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/_BlobPreview.generated.cs
@@ -0,0 +1,187 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Repository/_BlobPreview.cshtml")]
+ public partial class _Views_Repository__BlobPreview_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.TreeEntryModel>
+ {
+ public _Views_Repository__BlobPreview_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 3 "..\..\Views\Repository\_BlobPreview.cshtml"
+ if (Model.BlobType == BlobType.Text)
+{
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <pre><code");
+
+WriteAttribute("class", Tuple.Create(" class=\"", 97), Tuple.Create("\"", 130)
+, Tuple.Create(Tuple.Create("", 105), Tuple.Create("language", 105), true)
+
+ #line 5 "..\..\Views\Repository\_BlobPreview.cshtml"
+, Tuple.Create(Tuple.Create(" ", 113), Tuple.Create<System.Object, System.Int32>(Model.TextBrush
+
+ #line default
+ #line hidden
+, 114), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 5 "..\..\Views\Repository\_BlobPreview.cshtml"
+ Write(Model.TextContent);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</code></pre>\r\n");
+
+
+ #line 6 "..\..\Views\Repository\_BlobPreview.cshtml"
+}
+else if (Model.BlobType == BlobType.MarkDown)
+{
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <div");
+
+WriteLiteral(" id=\"md\"");
+
+WriteLiteral(">");
+
+
+ #line 9 "..\..\Views\Repository\_BlobPreview.cshtml"
+ Write(Model.TextContent);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n");
+
+
+ #line 10 "..\..\Views\Repository\_BlobPreview.cshtml"
+}
+else if (Model.BlobType == BlobType.Image)
+{
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <img");
+
+WriteAttribute("alt", Tuple.Create(" alt=\"", 319), Tuple.Create("\"", 336)
+
+ #line 13 "..\..\Views\Repository\_BlobPreview.cshtml"
+, Tuple.Create(Tuple.Create("", 325), Tuple.Create<System.Object, System.Int32>(Model.Name
+
+ #line default
+ #line hidden
+, 325), false)
+);
+
+WriteAttribute("src", Tuple.Create(" src=\"", 337), Tuple.Create("\"", 454)
+
+ #line 13 "..\..\Views\Repository\_BlobPreview.cshtml"
+, Tuple.Create(Tuple.Create("", 343), Tuple.Create<System.Object, System.Int32>(Url.Action("Raw", Html.OverRoute(new { path = (Model.ReferenceName ?? Model.Commit.Sha) + "/" + Model.Path }))
+
+ #line default
+ #line hidden
+, 343), false)
+);
+
+WriteLiteral(" />\r\n");
+
+
+ #line 14 "..\..\Views\Repository\_BlobPreview.cshtml"
+}
+else // Binary
+{
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <div");
+
+WriteLiteral(" class=\"alert alert-block\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 18 "..\..\Views\Repository\_BlobPreview.cshtml"
+ Write(SR.Repository_BinaryFileWrods);
+
+
+ #line default
+ #line hidden
+WriteLiteral("<br />\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 19 "..\..\Views\Repository\_BlobPreview.cshtml"
+ Write(Html.ActionLink(SR.Repository_Raw, "Raw", Html.OverRoute(new { path = (Model.ReferenceName ?? Model.Commit.Sha) + "/" + Model.Path })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n");
+
+
+ #line 21 "..\..\Views\Repository\_BlobPreview.cshtml"
+}
+
+ #line default
+ #line hidden
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Repository/_BranchSelector.cshtml b/GitCandy.Web/Views/Repository/_BranchSelector.cshtml
new file mode 100644
index 0000000..b6aaa92
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/_BranchSelector.cshtml
@@ -0,0 +1,59 @@
+@model GitCandy.Models.BranchSelectorModel
+@{
+ var values = ViewContext.RouteData.Values;
+ var action = values["action"] as String;
+ var noLink = Model.Path == null;
+ var identity = Html.GetRootViewBag().Identity++;
+}
+<div class="dropdown btn-group">
+ <a class="btn btn-default" data-toggle="dropdown"><i class="@Model.CurrentIsBranch.ToFlagString("glyphicon glyphicon-random", "glyphicon glyphicon-tag")"></i><span class="branch-name"> @Model.Current</span></a>
+ <a href="#" class="btn btn-default dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></a>
+ <div class="dropdown-menu">
+ <form>
+ <ul class="nav nav-tabs nav-justified">
+ <li class="@Model.CurrentIsBranch.ToFlagString("active", "")"><a href="#branch-pane-@identity" data-toggle="tab">@SR.Repository_Branches</a></li>
+ <li class="@Model.CurrentIsBranch.ToFlagString("", "active")"><a href="#tag-pane-@identity" data-toggle="tab">@SR.Repository_Tags</a></li>
+ </ul>
+ <div class="tab-content">
+ <div class="tab-pane @Model.CurrentIsBranch.ToFlagString("active", "") branch-selector" id="branch-pane-@identity">
+ <ul class="nav nav-list">
+ @foreach (var branch in Model.Branches)
+ {
+ if (noLink)
+ {
+ <li><a href="#">@branch</a></li>
+ }
+ else if (branch == Model.Current)
+ {
+ <li class="active"><a>@branch</a></li>
+ }
+ else
+ {
+ <li>@Html.ActionLink(branch, action, Html.OverRoute(new { path = branch + "/" + Model.Path }))</li>
+ }
+ }
+ </ul>
+ </div>
+ <div class="tab-pane @Model.CurrentIsBranch.ToFlagString("", "active") branch-selector" id="tag-pane-@identity">
+ <ul class="nav nav-list">
+ @foreach (var tag in Model.Tags)
+ {
+ if (noLink)
+ {
+ <li><a href="#">@tag</a></li>
+ }
+ else if (tag == Model.Current)
+ {
+ <li class="active"><a>@tag</a></li>
+ }
+ else
+ {
+ <li>@Html.ActionLink(tag, action, Html.OverRoute(new { path = tag + "/" + Model.Path }))</li>
+ }
+ }
+ </ul>
+ </div>
+ </div>
+ </form>
+ </div>
+</div>
diff --git a/GitCandy.Web/Views/Repository/_BranchSelector.generated.cs b/GitCandy.Web/Views/Repository/_BranchSelector.generated.cs
new file mode 100644
index 0000000..f45ba60
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/_BranchSelector.generated.cs
@@ -0,0 +1,428 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Repository/_BranchSelector.cshtml")]
+ public partial class _Views_Repository__BranchSelector_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.BranchSelectorModel>
+ {
+ public _Views_Repository__BranchSelector_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 2 "..\..\Views\Repository\_BranchSelector.cshtml"
+
+ var values = ViewContext.RouteData.Values;
+ var action = values["action"] as String;
+ var noLink = Model.Path == null;
+ var identity = Html.GetRootViewBag().Identity++;
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n<div");
+
+WriteLiteral(" class=\"dropdown btn-group\"");
+
+WriteLiteral(">\r\n <a");
+
+WriteLiteral(" class=\"btn btn-default\"");
+
+WriteLiteral(" data-toggle=\"dropdown\"");
+
+WriteLiteral("><i");
+
+WriteAttribute("class", Tuple.Create(" class=\"", 327), Tuple.Create("\"", 427)
+
+ #line 9 "..\..\Views\Repository\_BranchSelector.cshtml"
+, Tuple.Create(Tuple.Create("", 335), Tuple.Create<System.Object, System.Int32>(Model.CurrentIsBranch.ToFlagString("glyphicon glyphicon-random", "glyphicon glyphicon-tag")
+
+ #line default
+ #line hidden
+, 335), false)
+);
+
+WriteLiteral("></i><span");
+
+WriteLiteral(" class=\"branch-name\"");
+
+WriteLiteral("> ");
+
+
+ #line 9 "..\..\Views\Repository\_BranchSelector.cshtml"
+ Write(Model.Current);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span></a>\r\n <a");
+
+WriteLiteral(" href=\"#\"");
+
+WriteLiteral(" class=\"btn btn-default dropdown-toggle\"");
+
+WriteLiteral(" data-toggle=\"dropdown\"");
+
+WriteLiteral("><span");
+
+WriteLiteral(" class=\"caret\"");
+
+WriteLiteral("></span></a>\r\n <div");
+
+WriteLiteral(" class=\"dropdown-menu\"");
+
+WriteLiteral(">\r\n <form>\r\n <ul");
+
+WriteLiteral(" class=\"nav nav-tabs nav-justified\"");
+
+WriteLiteral(">\r\n <li");
+
+WriteAttribute("class", Tuple.Create(" class=\"", 720), Tuple.Create("\"", 777)
+
+ #line 14 "..\..\Views\Repository\_BranchSelector.cshtml"
+, Tuple.Create(Tuple.Create("", 728), Tuple.Create<System.Object, System.Int32>(Model.CurrentIsBranch.ToFlagString("active", "")
+
+ #line default
+ #line hidden
+, 728), false)
+);
+
+WriteLiteral("><a");
+
+WriteAttribute("href", Tuple.Create(" href=\"", 781), Tuple.Create("\"", 810)
+, Tuple.Create(Tuple.Create("", 788), Tuple.Create("#branch-pane-", 788), true)
+
+ #line 14 "..\..\Views\Repository\_BranchSelector.cshtml"
+ , Tuple.Create(Tuple.Create("", 801), Tuple.Create<System.Object, System.Int32>(identity
+
+ #line default
+ #line hidden
+, 801), false)
+);
+
+WriteLiteral(" data-toggle=\"tab\"");
+
+WriteLiteral(">");
+
+
+ #line 14 "..\..\Views\Repository\_BranchSelector.cshtml"
+ Write(SR.Repository_Branches);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</a></li>\r\n <li");
+
+WriteAttribute("class", Tuple.Create(" class=\"", 883), Tuple.Create("\"", 940)
+
+ #line 15 "..\..\Views\Repository\_BranchSelector.cshtml"
+, Tuple.Create(Tuple.Create("", 891), Tuple.Create<System.Object, System.Int32>(Model.CurrentIsBranch.ToFlagString("", "active")
+
+ #line default
+ #line hidden
+, 891), false)
+);
+
+WriteLiteral("><a");
+
+WriteAttribute("href", Tuple.Create(" href=\"", 944), Tuple.Create("\"", 970)
+, Tuple.Create(Tuple.Create("", 951), Tuple.Create("#tag-pane-", 951), true)
+
+ #line 15 "..\..\Views\Repository\_BranchSelector.cshtml"
+ , Tuple.Create(Tuple.Create("", 961), Tuple.Create<System.Object, System.Int32>(identity
+
+ #line default
+ #line hidden
+, 961), false)
+);
+
+WriteLiteral(" data-toggle=\"tab\"");
+
+WriteLiteral(">");
+
+
+ #line 15 "..\..\Views\Repository\_BranchSelector.cshtml"
+ Write(SR.Repository_Tags);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</a></li>\r\n </ul>\r\n <div");
+
+WriteLiteral(" class=\"tab-content\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteAttribute("class", Tuple.Create(" class=\"", 1098), Tuple.Create("\"", 1180)
+, Tuple.Create(Tuple.Create("", 1106), Tuple.Create("tab-pane", 1106), true)
+
+ #line 18 "..\..\Views\Repository\_BranchSelector.cshtml"
+, Tuple.Create(Tuple.Create(" ", 1114), Tuple.Create<System.Object, System.Int32>(Model.CurrentIsBranch.ToFlagString("active", "")
+
+ #line default
+ #line hidden
+, 1115), false)
+, Tuple.Create(Tuple.Create(" ", 1164), Tuple.Create("branch-selector", 1165), true)
+);
+
+WriteAttribute("id", Tuple.Create(" id=\"", 1181), Tuple.Create("\"", 1207)
+, Tuple.Create(Tuple.Create("", 1186), Tuple.Create("branch-pane-", 1186), true)
+
+ #line 18 "..\..\Views\Repository\_BranchSelector.cshtml"
+ , Tuple.Create(Tuple.Create("", 1198), Tuple.Create<System.Object, System.Int32>(identity
+
+ #line default
+ #line hidden
+, 1198), false)
+);
+
+WriteLiteral(">\r\n <ul");
+
+WriteLiteral(" class=\"nav nav-list\"");
+
+WriteLiteral(">\r\n");
+
+
+ #line 20 "..\..\Views\Repository\_BranchSelector.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 20 "..\..\Views\Repository\_BranchSelector.cshtml"
+ foreach (var branch in Model.Branches)
+ {
+ if (noLink)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <li><a");
+
+WriteLiteral(" href=\"#\"");
+
+WriteLiteral(">");
+
+
+ #line 24 "..\..\Views\Repository\_BranchSelector.cshtml"
+ Write(branch);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</a></li>\r\n");
+
+
+ #line 25 "..\..\Views\Repository\_BranchSelector.cshtml"
+ }
+ else if (branch == Model.Current)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <li");
+
+WriteLiteral(" class=\"active\"");
+
+WriteLiteral("><a>");
+
+
+ #line 28 "..\..\Views\Repository\_BranchSelector.cshtml"
+ Write(branch);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</a></li>\r\n");
+
+
+ #line 29 "..\..\Views\Repository\_BranchSelector.cshtml"
+ }
+ else
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <li>");
+
+
+ #line 32 "..\..\Views\Repository\_BranchSelector.cshtml"
+ Write(Html.ActionLink(branch, action, Html.OverRoute(new { path = branch + "/" + Model.Path })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</li>\r\n");
+
+
+ #line 33 "..\..\Views\Repository\_BranchSelector.cshtml"
+ }
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" </ul>\r\n </div>\r\n <div");
+
+WriteAttribute("class", Tuple.Create(" class=\"", 2043), Tuple.Create("\"", 2125)
+, Tuple.Create(Tuple.Create("", 2051), Tuple.Create("tab-pane", 2051), true)
+
+ #line 37 "..\..\Views\Repository\_BranchSelector.cshtml"
+, Tuple.Create(Tuple.Create(" ", 2059), Tuple.Create<System.Object, System.Int32>(Model.CurrentIsBranch.ToFlagString("", "active")
+
+ #line default
+ #line hidden
+, 2060), false)
+, Tuple.Create(Tuple.Create(" ", 2109), Tuple.Create("branch-selector", 2110), true)
+);
+
+WriteAttribute("id", Tuple.Create(" id=\"", 2126), Tuple.Create("\"", 2149)
+, Tuple.Create(Tuple.Create("", 2131), Tuple.Create("tag-pane-", 2131), true)
+
+ #line 37 "..\..\Views\Repository\_BranchSelector.cshtml"
+ , Tuple.Create(Tuple.Create("", 2140), Tuple.Create<System.Object, System.Int32>(identity
+
+ #line default
+ #line hidden
+, 2140), false)
+);
+
+WriteLiteral(">\r\n <ul");
+
+WriteLiteral(" class=\"nav nav-list\"");
+
+WriteLiteral(">\r\n");
+
+
+ #line 39 "..\..\Views\Repository\_BranchSelector.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 39 "..\..\Views\Repository\_BranchSelector.cshtml"
+ foreach (var tag in Model.Tags)
+ {
+ if (noLink)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <li><a");
+
+WriteLiteral(" href=\"#\"");
+
+WriteLiteral(">");
+
+
+ #line 43 "..\..\Views\Repository\_BranchSelector.cshtml"
+ Write(tag);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</a></li>\r\n");
+
+
+ #line 44 "..\..\Views\Repository\_BranchSelector.cshtml"
+ }
+ else if (tag == Model.Current)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <li");
+
+WriteLiteral(" class=\"active\"");
+
+WriteLiteral("><a>");
+
+
+ #line 47 "..\..\Views\Repository\_BranchSelector.cshtml"
+ Write(tag);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</a></li>\r\n");
+
+
+ #line 48 "..\..\Views\Repository\_BranchSelector.cshtml"
+ }
+ else
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <li>");
+
+
+ #line 51 "..\..\Views\Repository\_BranchSelector.cshtml"
+ Write(Html.ActionLink(tag, action, Html.OverRoute(new { path = tag + "/" + Model.Path })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</li>\r\n");
+
+
+ #line 52 "..\..\Views\Repository\_BranchSelector.cshtml"
+ }
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" </ul>\r\n </div>\r\n </div>\r\n </" +
+"form>\r\n </div>\r\n</div>\r\n");
+
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Repository/_Diff.cshtml b/GitCandy.Web/Views/Repository/_Diff.cshtml
new file mode 100644
index 0000000..e3abb45
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/_Diff.cshtml
@@ -0,0 +1,47 @@
+@model GitCandy.Models.CommitModel
+
+<div class="page-divider"></div>
+<div>@String.Format(SR.Repository_ChangedSummary, Model.Changes.Count(), Model.Changes.Sum(s => s.LinesAdded), Model.Changes.Sum(s => s.LinesDeleted))</div>
+@foreach (var change in Model.Changes)
+{
+ var removed = change.ChangeKind == LibGit2Sharp.ChangeKind.Deleted || change.ChangeKind == LibGit2Sharp.ChangeKind.Ignored;
+ <div class="row">
+ <div>
+ <div class="col-md-2 pull-left">@change.ChangeKind.ToLocateString() +@change.LinesAdded -@change.LinesDeleted</div>
+ <div class="col-md-10 pull-right">
+ @if (change.OldPath != change.Path)
+ {
+ @change.OldPath @Html.Raw(" → ")
+ }
+ @(removed
+ ? Html.Raw(change.Path)
+ : Html.ActionLink(change.Path, "Blob", Html.OverRoute(new { path = (Model.ReferenceName ?? Model.Sha) + "/" + change.Path })))
+ </div>
+ </div>
+ </div>
+}
+@foreach (var change in Model.Changes)
+{
+ var removed = change.ChangeKind == LibGit2Sharp.ChangeKind.Deleted || change.ChangeKind == LibGit2Sharp.ChangeKind.Ignored;
+ <div class="page-divider"></div>
+ <div class="row">
+ <div>
+ <div class="col-md-2">@change.ChangeKind.ToLocateString() +@change.LinesAdded -@change.LinesDeleted</div>
+ <div class="col-md-10">
+ @if (change.OldPath != change.Path)
+ {
+ @change.OldPath @Html.Raw(" → ")
+ }
+ @(removed
+ ? Html.Raw(change.Path)
+ : Html.ActionLink(change.Path, "Blob", Html.OverRoute(new { path = (Model.ReferenceName ?? Model.Sha) + "/" + change.Path })))
+ </div>
+ </div>
+ @if (!removed)
+ {
+ <div class="col-md-12">
+ <pre><code class="language diff">@change.Patch</code></pre>
+ </div>
+ }
+ </div>
+}
diff --git a/GitCandy.Web/Views/Repository/_Diff.generated.cs b/GitCandy.Web/Views/Repository/_Diff.generated.cs
new file mode 100644
index 0000000..2e9a861
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/_Diff.generated.cs
@@ -0,0 +1,342 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Repository/_Diff.cshtml")]
+ public partial class _Views_Repository__Diff_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.CommitModel>
+ {
+ public _Views_Repository__Diff_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+WriteLiteral("<div");
+
+WriteLiteral(" class=\"page-divider\"");
+
+WriteLiteral("></div>\r\n<div>");
+
+
+ #line 4 "..\..\Views\Repository\_Diff.cshtml"
+Write(String.Format(SR.Repository_ChangedSummary, Model.Changes.Count(), Model.Changes.Sum(s => s.LinesAdded), Model.Changes.Sum(s => s.LinesDeleted)));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n");
+
+
+ #line 5 "..\..\Views\Repository\_Diff.cshtml"
+ foreach (var change in Model.Changes)
+{
+ var removed = change.ChangeKind == LibGit2Sharp.ChangeKind.Deleted || change.ChangeKind == LibGit2Sharp.ChangeKind.Ignored;
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <div");
+
+WriteLiteral(" class=\"row\"");
+
+WriteLiteral(">\r\n <div>\r\n <div");
+
+WriteLiteral(" class=\"col-md-2 pull-left\"");
+
+WriteLiteral(">");
+
+
+ #line 10 "..\..\Views\Repository\_Diff.cshtml"
+ Write(change.ChangeKind.ToLocateString());
+
+
+ #line default
+ #line hidden
+WriteLiteral(" +");
+
+
+ #line 10 "..\..\Views\Repository\_Diff.cshtml"
+ Write(change.LinesAdded);
+
+
+ #line default
+ #line hidden
+WriteLiteral(" -");
+
+
+ #line 10 "..\..\Views\Repository\_Diff.cshtml"
+ Write(change.LinesDeleted);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n <div");
+
+WriteLiteral(" class=\"col-md-10 pull-right\"");
+
+WriteLiteral(">\r\n");
+
+
+ #line 12 "..\..\Views\Repository\_Diff.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 12 "..\..\Views\Repository\_Diff.cshtml"
+ if (change.OldPath != change.Path)
+ {
+
+
+ #line default
+ #line hidden
+
+ #line 14 "..\..\Views\Repository\_Diff.cshtml"
+ Write(change.OldPath);
+
+
+ #line default
+ #line hidden
+
+ #line 14 "..\..\Views\Repository\_Diff.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 14 "..\..\Views\Repository\_Diff.cshtml"
+ Write(Html.Raw(" → "));
+
+
+ #line default
+ #line hidden
+
+ #line 14 "..\..\Views\Repository\_Diff.cshtml"
+
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" ");
+
+
+ #line 16 "..\..\Views\Repository\_Diff.cshtml"
+ Write(removed
+ ? Html.Raw(change.Path)
+ : Html.ActionLink(change.Path, "Blob", Html.OverRoute(new { path = (Model.ReferenceName ?? Model.Sha) + "/" + change.Path })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n </div>\r\n </div>\r\n");
+
+
+ #line 22 "..\..\Views\Repository\_Diff.cshtml"
+}
+
+
+ #line default
+ #line hidden
+
+ #line 23 "..\..\Views\Repository\_Diff.cshtml"
+ foreach (var change in Model.Changes)
+{
+ var removed = change.ChangeKind == LibGit2Sharp.ChangeKind.Deleted || change.ChangeKind == LibGit2Sharp.ChangeKind.Ignored;
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <div");
+
+WriteLiteral(" class=\"page-divider\"");
+
+WriteLiteral("></div>\r\n");
+
+WriteLiteral(" <div");
+
+WriteLiteral(" class=\"row\"");
+
+WriteLiteral(">\r\n <div>\r\n <div");
+
+WriteLiteral(" class=\"col-md-2\"");
+
+WriteLiteral(">");
+
+
+ #line 29 "..\..\Views\Repository\_Diff.cshtml"
+ Write(change.ChangeKind.ToLocateString());
+
+
+ #line default
+ #line hidden
+WriteLiteral(" +");
+
+
+ #line 29 "..\..\Views\Repository\_Diff.cshtml"
+ Write(change.LinesAdded);
+
+
+ #line default
+ #line hidden
+WriteLiteral(" -");
+
+
+ #line 29 "..\..\Views\Repository\_Diff.cshtml"
+ Write(change.LinesDeleted);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n <div");
+
+WriteLiteral(" class=\"col-md-10\"");
+
+WriteLiteral(">\r\n");
+
+
+ #line 31 "..\..\Views\Repository\_Diff.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 31 "..\..\Views\Repository\_Diff.cshtml"
+ if (change.OldPath != change.Path)
+ {
+
+
+ #line default
+ #line hidden
+
+ #line 33 "..\..\Views\Repository\_Diff.cshtml"
+ Write(change.OldPath);
+
+
+ #line default
+ #line hidden
+
+ #line 33 "..\..\Views\Repository\_Diff.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 33 "..\..\Views\Repository\_Diff.cshtml"
+ Write(Html.Raw(" → "));
+
+
+ #line default
+ #line hidden
+
+ #line 33 "..\..\Views\Repository\_Diff.cshtml"
+
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" ");
+
+
+ #line 35 "..\..\Views\Repository\_Diff.cshtml"
+ Write(removed
+ ? Html.Raw(change.Path)
+ : Html.ActionLink(change.Path, "Blob", Html.OverRoute(new { path = (Model.ReferenceName ?? Model.Sha) + "/" + change.Path })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n </div>\r\n");
+
+
+ #line 40 "..\..\Views\Repository\_Diff.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 40 "..\..\Views\Repository\_Diff.cshtml"
+ if (!removed)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <div");
+
+WriteLiteral(" class=\"col-md-12\"");
+
+WriteLiteral(">\r\n <pre><code");
+
+WriteLiteral(" class=\"language diff\"");
+
+WriteLiteral(">");
+
+
+ #line 43 "..\..\Views\Repository\_Diff.cshtml"
+ Write(change.Patch);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</code></pre>\r\n </div>\r\n");
+
+
+ #line 45 "..\..\Views\Repository\_Diff.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" </div>\r\n");
+
+
+ #line 47 "..\..\Views\Repository\_Diff.cshtml"
+}
+
+
+ #line default
+ #line hidden
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Repository/_GitUrlButton.cshtml b/GitCandy.Web/Views/Repository/_GitUrlButton.cshtml
new file mode 100644
index 0000000..cda8769
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/_GitUrlButton.cshtml
@@ -0,0 +1,23 @@
+@model GitUrl[]
+
+@{
+ var first = Model.First();
+}
+
+<div class="btn-group">
+ <div class="input-group url-path">
+ <div class="input-group-btn">
+ <button class="btn btn-default dropdown-toggle" data-toggle="dropdown">@first.Type <span class="caret"></span></button>
+ <ul class="dropdown-menu">
+ @foreach (var item in Model)
+ {
+ <li data-giturl="@item.Url"><a href="#">@item.Type</a></li>
+ }
+ </ul>
+ </div>
+ <input type="text" class="form-control" readonly value="@first.Url">
+ <div class="input-group-btn">
+ <button class="btn btn-default copy-clip tip" aria-label="@SR.Repository_CopyToClipboard" data-tips="@SR.Repository_CopyToClipboard" data-copied="@SR.Repository_Copied"><i class="glyphicon glyphicon-copy"></i></button>
+ </div>
+ </div>
+</div>
diff --git a/GitCandy.Web/Views/Repository/_GitUrlButton.generated.cs b/GitCandy.Web/Views/Repository/_GitUrlButton.generated.cs
new file mode 100644
index 0000000..2e198d7
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/_GitUrlButton.generated.cs
@@ -0,0 +1,213 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Repository/_GitUrlButton.cshtml")]
+ public partial class _Views_Repository__GitUrlButton_cshtml : System.Web.Mvc.WebViewPage<GitUrl[]>
+ {
+ public _Views_Repository__GitUrlButton_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 3 "..\..\Views\Repository\_GitUrlButton.cshtml"
+
+ var first = Model.First();
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<div");
+
+WriteLiteral(" class=\"btn-group\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"input-group url-path\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"input-group-btn\"");
+
+WriteLiteral(">\r\n <button");
+
+WriteLiteral(" class=\"btn btn-default dropdown-toggle\"");
+
+WriteLiteral(" data-toggle=\"dropdown\"");
+
+WriteLiteral(">");
+
+
+ #line 10 "..\..\Views\Repository\_GitUrlButton.cshtml"
+ Write(first.Type);
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <span");
+
+WriteLiteral(" class=\"caret\"");
+
+WriteLiteral("></span></button>\r\n <ul");
+
+WriteLiteral(" class=\"dropdown-menu\"");
+
+WriteLiteral(">\r\n");
+
+
+ #line 12 "..\..\Views\Repository\_GitUrlButton.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 12 "..\..\Views\Repository\_GitUrlButton.cshtml"
+ foreach (var item in Model)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <li");
+
+WriteLiteral(" data-giturl=\"");
+
+
+ #line 14 "..\..\Views\Repository\_GitUrlButton.cshtml"
+ Write(item.Url);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral("><a");
+
+WriteLiteral(" href=\"#\"");
+
+WriteLiteral(">");
+
+
+ #line 14 "..\..\Views\Repository\_GitUrlButton.cshtml"
+ Write(item.Type);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</a></li>\r\n");
+
+
+ #line 15 "..\..\Views\Repository\_GitUrlButton.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" </ul>\r\n </div>\r\n <input");
+
+WriteLiteral(" type=\"text\"");
+
+WriteLiteral(" class=\"form-control\"");
+
+WriteLiteral(" readonly");
+
+WriteAttribute("value", Tuple.Create(" value=\"", 593), Tuple.Create("\"", 611)
+
+ #line 18 "..\..\Views\Repository\_GitUrlButton.cshtml"
+, Tuple.Create(Tuple.Create("", 601), Tuple.Create<System.Object, System.Int32>(first.Url
+
+ #line default
+ #line hidden
+, 601), false)
+);
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"input-group-btn\"");
+
+WriteLiteral(">\r\n <button");
+
+WriteLiteral(" class=\"btn btn-default copy-clip tip\"");
+
+WriteAttribute("aria-label", Tuple.Create(" aria-label=\"", 711), Tuple.Create("\"", 754)
+
+ #line 20 "..\..\Views\Repository\_GitUrlButton.cshtml"
+, Tuple.Create(Tuple.Create("", 724), Tuple.Create<System.Object, System.Int32>(SR.Repository_CopyToClipboard
+
+ #line default
+ #line hidden
+, 724), false)
+);
+
+WriteLiteral(" data-tips=\"");
+
+
+ #line 20 "..\..\Views\Repository\_GitUrlButton.cshtml"
+ Write(SR.Repository_CopyToClipboard);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral(" data-copied=\"");
+
+
+ #line 20 "..\..\Views\Repository\_GitUrlButton.cshtml"
+ Write(SR.Repository_Copied);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral("><i");
+
+WriteLiteral(" class=\"glyphicon glyphicon-copy\"");
+
+WriteLiteral("></i></button>\r\n </div>\r\n </div>\r\n</div>\r\n");
+
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Repository/_PathBar.cshtml b/GitCandy.Web/Views/Repository/_PathBar.cshtml
new file mode 100644
index 0000000..2cc8d82
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/_PathBar.cshtml
@@ -0,0 +1,33 @@
+@model GitCandy.Models.PathBarModel
+
+<ul class="breadcrumb">
+ <li>@Html.ActionLink(Model.Name, Model.Action, Html.OverRoute(new { path = (Model.ReferenceName ?? Model.ReferenceSha) }))</li>
+
+ @if (!String.IsNullOrEmpty(Model.Path))
+ {
+ var dirs = Model.Path.Split('/');
+ var length = dirs.Length;
+ var currentPath = String.Empty;
+ for (var i = 0; i < length; i++)
+ {
+ if (i != 0)
+ {
+ currentPath += "/" + dirs[i];
+ }
+ else
+ {
+ currentPath += dirs[i];
+ }
+ if (i + 1 == length)
+ {
+ <li class="active">
+ @dirs[i]
+ </li>
+ }
+ else
+ {
+ <li>@Html.ActionLink(dirs[i], Model.Action, Html.OverRoute(new { path = (Model.ReferenceName ?? Model.ReferenceSha) + "/" + currentPath })) </li>
+ }
+ }
+ }
+</ul>
diff --git a/GitCandy.Web/Views/Repository/_PathBar.generated.cs b/GitCandy.Web/Views/Repository/_PathBar.generated.cs
new file mode 100644
index 0000000..fa0cc2c
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/_PathBar.generated.cs
@@ -0,0 +1,147 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Repository/_PathBar.cshtml")]
+ public partial class _Views_Repository__PathBar_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.PathBarModel>
+ {
+ public _Views_Repository__PathBar_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+WriteLiteral("<ul");
+
+WriteLiteral(" class=\"breadcrumb\"");
+
+WriteLiteral(">\r\n <li>");
+
+
+ #line 4 "..\..\Views\Repository\_PathBar.cshtml"
+ Write(Html.ActionLink(Model.Name, Model.Action, Html.OverRoute(new { path = (Model.ReferenceName ?? Model.ReferenceSha) })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</li>\r\n\r\n");
+
+
+ #line 6 "..\..\Views\Repository\_PathBar.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 6 "..\..\Views\Repository\_PathBar.cshtml"
+ if (!String.IsNullOrEmpty(Model.Path))
+ {
+ var dirs = Model.Path.Split('/');
+ var length = dirs.Length;
+ var currentPath = String.Empty;
+ for (var i = 0; i < length; i++)
+ {
+ if (i != 0)
+ {
+ currentPath += "/" + dirs[i];
+ }
+ else
+ {
+ currentPath += dirs[i];
+ }
+ if (i + 1 == length)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <li");
+
+WriteLiteral(" class=\"active\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 24 "..\..\Views\Repository\_PathBar.cshtml"
+ Write(dirs[i]);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </li>\r\n");
+
+
+ #line 26 "..\..\Views\Repository\_PathBar.cshtml"
+ }
+ else
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <li>");
+
+
+ #line 29 "..\..\Views\Repository\_PathBar.cshtml"
+ Write(Html.ActionLink(dirs[i], Model.Action, Html.OverRoute(new { path = (Model.ReferenceName ?? Model.ReferenceSha) + "/" + currentPath })));
+
+
+ #line default
+ #line hidden
+WriteLiteral(" </li>\r\n");
+
+
+ #line 30 "..\..\Views\Repository\_PathBar.cshtml"
+ }
+ }
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral("</ul>\r\n");
+
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Repository/_ZipButton.cshtml b/GitCandy.Web/Views/Repository/_ZipButton.cshtml
new file mode 100644
index 0000000..5a4bf03
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/_ZipButton.cshtml
@@ -0,0 +1,11 @@
+@model String
+
+<div class="btn-group">
+ <a href="@Url.Action("Archive", Html.OverRoute(new { path = Model }))" class="btn btn-default"><span class="glyphicon glyphicon-download-alt"></span>@SR.Repository_Zip</a>
+ <a href="#" class="btn btn-default dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></a>
+ <ul class="dropdown-menu">
+ <li>@Html.ActionLink(SR.Repository_ZipLF, "Archive", Html.OverRoute(new { path = Model, eol = "LF" }))</li>
+ <li>@Html.ActionLink(SR.Repository_ZipCR, "Archive", Html.OverRoute(new { path = Model, eol = "CR" }))</li>
+ <li>@Html.ActionLink(SR.Repository_ZipCRLF, "Archive", Html.OverRoute(new { path = Model, eol = "CRLF" }))</li>
+ </ul>
+</div>
diff --git a/GitCandy.Web/Views/Repository/_ZipButton.generated.cs b/GitCandy.Web/Views/Repository/_ZipButton.generated.cs
new file mode 100644
index 0000000..67a4f0a
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/_ZipButton.generated.cs
@@ -0,0 +1,131 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Repository/_ZipButton.cshtml")]
+ public partial class _Views_Repository__ZipButton_cshtml : System.Web.Mvc.WebViewPage<String>
+ {
+ public _Views_Repository__ZipButton_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+WriteLiteral("<div");
+
+WriteLiteral(" class=\"btn-group\"");
+
+WriteLiteral(">\r\n <a");
+
+WriteAttribute("href", Tuple.Create(" href=\"", 48), Tuple.Create("\"", 115)
+
+ #line 4 "..\..\Views\Repository\_ZipButton.cshtml"
+, Tuple.Create(Tuple.Create("", 55), Tuple.Create<System.Object, System.Int32>(Url.Action("Archive", Html.OverRoute(new { path = Model }))
+
+ #line default
+ #line hidden
+, 55), false)
+);
+
+WriteLiteral(" class=\"btn btn-default\"");
+
+WriteLiteral("><span");
+
+WriteLiteral(" class=\"glyphicon glyphicon-download-alt\"");
+
+WriteLiteral("></span>");
+
+
+ #line 4 "..\..\Views\Repository\_ZipButton.cshtml"
+ Write(SR.Repository_Zip);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</a>\r\n <a");
+
+WriteLiteral(" href=\"#\"");
+
+WriteLiteral(" class=\"btn btn-default dropdown-toggle\"");
+
+WriteLiteral(" data-toggle=\"dropdown\"");
+
+WriteLiteral("><span");
+
+WriteLiteral(" class=\"caret\"");
+
+WriteLiteral("></span></a>\r\n <ul");
+
+WriteLiteral(" class=\"dropdown-menu\"");
+
+WriteLiteral(">\r\n <li>");
+
+
+ #line 7 "..\..\Views\Repository\_ZipButton.cshtml"
+ Write(Html.ActionLink(SR.Repository_ZipLF, "Archive", Html.OverRoute(new { path = Model, eol = "LF" })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</li>\r\n <li>");
+
+
+ #line 8 "..\..\Views\Repository\_ZipButton.cshtml"
+ Write(Html.ActionLink(SR.Repository_ZipCR, "Archive", Html.OverRoute(new { path = Model, eol = "CR" })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</li>\r\n <li>");
+
+
+ #line 9 "..\..\Views\Repository\_ZipButton.cshtml"
+ Write(Html.ActionLink(SR.Repository_ZipCRLF, "Archive", Html.OverRoute(new { path = Model, eol = "CRLF" })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</li>\r\n </ul>\r\n</div>\r\n");
+
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Repository/Blame.cshtml b/GitCandy.Web/Views/Repository/Blame.cshtml
new file mode 100644
index 0000000..b1d9ff3
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/Blame.cshtml
@@ -0,0 +1,43 @@
+@model GitCandy.Models.BlameModel
+
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Repository_BlameTitle, Model.RepositoryName, Model.ReferenceName ?? Model.Sha.ToShortSha(), Model.Path));
+}
+
+<h4>@Html.ActionLink(Model.RepositoryName, "Tree", Html.OverRoute(new { path = "" }))</h4>
+
+@Html.Partial("_PathBar", Model.PathBar)
+@Html.Partial("_BranchSelector", Model.BranchSelector)
+
+<div class="row">
+ <div class="col-md-12">
+ <div class="pull-right">
+ @Html.ActionLink(SR.Repository_History, "Commits", Html.OverRoute(new { path = (Model.ReferenceName ?? Model.Sha) + "/" + Model.Path }), new { @class = "btn btn-default" })
+ @Html.ActionLink(SR.Repository_NormalView, "Blob", Html.OverRoute(new { path = (Model.ReferenceName ?? Model.Sha) + "/" + Model.Path }), new { @class = "btn btn-default" })
+ @Html.ActionLink(SR.Repository_Raw, "Raw", Html.OverRoute(new { path = (Model.ReferenceName ?? Model.Sha) + "/" + Model.Path }), new { @class = "btn btn-default" })
+ </div>
+ @Model.SizeString
+ </div>
+</div>
+
+<table class="table table-bordered" data-brush="@Model.Brush">
+ <tbody>
+ @foreach (var hunk in Model.Hunks)
+ {
+ <tr>
+ <td class="blame-info">
+ <div>
+ <span>@Html.ActionLink(hunk.Sha.ToShortSha(), "Commit", Html.OverRoute(new { path = hunk.Sha + "/" + Model.Path }))</span>
+ <span>@Html.ActionLink("»", "Blame", Html.OverRoute(new { path = hunk.Sha + "/" + Model.Path }))</span>
+ <strong title="@hunk.AuthorEmail">@hunk.Author</strong>
+ </div>
+ <div>
+ <span title="@hunk.AuthorDate">@hunk.AuthorDate.LocalDateTime.ToFullString()</span>
+ <span title="@hunk.MessageShort">@hunk.MessageShort.ShortString(33)</span>
+ </div>
+ </td>
+ <td><pre class="blame-code"><code class="language no-highlight blame-code">@hunk.Code</code></pre></td>
+ </tr>
+ }
+ </tbody>
+</table>
diff --git a/GitCandy.Web/Views/Repository/Blame.generated.cs b/GitCandy.Web/Views/Repository/Blame.generated.cs
new file mode 100644
index 0000000..62e6bc3
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/Blame.generated.cs
@@ -0,0 +1,292 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Repository/Blame.cshtml")]
+ public partial class _Views_Repository_Blame_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.BlameModel>
+ {
+ public _Views_Repository_Blame_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 3 "..\..\Views\Repository\Blame.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Repository_BlameTitle, Model.RepositoryName, Model.ReferenceName ?? Model.Sha.ToShortSha(), Model.Path));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<h4>");
+
+
+ #line 7 "..\..\Views\Repository\Blame.cshtml"
+Write(Html.ActionLink(Model.RepositoryName, "Tree", Html.OverRoute(new { path = "" })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h4>\r\n\r\n");
+
+
+ #line 9 "..\..\Views\Repository\Blame.cshtml"
+Write(Html.Partial("_PathBar", Model.PathBar));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n");
+
+
+ #line 10 "..\..\Views\Repository\Blame.cshtml"
+Write(Html.Partial("_BranchSelector", Model.BranchSelector));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<div");
+
+WriteLiteral(" class=\"row\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"col-md-12\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"pull-right\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 15 "..\..\Views\Repository\Blame.cshtml"
+ Write(Html.ActionLink(SR.Repository_History, "Commits", Html.OverRoute(new { path = (Model.ReferenceName ?? Model.Sha) + "/" + Model.Path }), new { @class = "btn btn-default" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 16 "..\..\Views\Repository\Blame.cshtml"
+ Write(Html.ActionLink(SR.Repository_NormalView, "Blob", Html.OverRoute(new { path = (Model.ReferenceName ?? Model.Sha) + "/" + Model.Path }), new { @class = "btn btn-default" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 17 "..\..\Views\Repository\Blame.cshtml"
+ Write(Html.ActionLink(SR.Repository_Raw, "Raw", Html.OverRoute(new { path = (Model.ReferenceName ?? Model.Sha) + "/" + Model.Path }), new { @class = "btn btn-default" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 19 "..\..\Views\Repository\Blame.cshtml"
+ Write(Model.SizeString);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n</div>\r\n\r\n<table");
+
+WriteLiteral(" class=\"table table-bordered\"");
+
+WriteLiteral(" data-brush=\"");
+
+
+ #line 23 "..\..\Views\Repository\Blame.cshtml"
+ Write(Model.Brush);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral(">\r\n <tbody>\r\n");
+
+
+ #line 25 "..\..\Views\Repository\Blame.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 25 "..\..\Views\Repository\Blame.cshtml"
+ foreach (var hunk in Model.Hunks)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <tr>\r\n <td");
+
+WriteLiteral(" class=\"blame-info\"");
+
+WriteLiteral(">\r\n <div>\r\n <span>");
+
+
+ #line 30 "..\..\Views\Repository\Blame.cshtml"
+ Write(Html.ActionLink(hunk.Sha.ToShortSha(), "Commit", Html.OverRoute(new { path = hunk.Sha + "/" + Model.Path })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span>\r\n <span>");
+
+
+ #line 31 "..\..\Views\Repository\Blame.cshtml"
+ Write(Html.ActionLink("»", "Blame", Html.OverRoute(new { path = hunk.Sha + "/" + Model.Path })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span>\r\n <strong");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 1644), Tuple.Create("\"", 1669)
+
+ #line 32 "..\..\Views\Repository\Blame.cshtml"
+, Tuple.Create(Tuple.Create("", 1652), Tuple.Create<System.Object, System.Int32>(hunk.AuthorEmail
+
+ #line default
+ #line hidden
+, 1652), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 32 "..\..\Views\Repository\Blame.cshtml"
+ Write(hunk.Author);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</strong>\r\n </div>\r\n <div>\r\n " +
+" <span");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 1778), Tuple.Create("\"", 1802)
+
+ #line 35 "..\..\Views\Repository\Blame.cshtml"
+, Tuple.Create(Tuple.Create("", 1786), Tuple.Create<System.Object, System.Int32>(hunk.AuthorDate
+
+ #line default
+ #line hidden
+, 1786), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 35 "..\..\Views\Repository\Blame.cshtml"
+ Write(hunk.AuthorDate.LocalDateTime.ToFullString());
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span>\r\n <span");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 1887), Tuple.Create("\"", 1913)
+
+ #line 36 "..\..\Views\Repository\Blame.cshtml"
+, Tuple.Create(Tuple.Create("", 1895), Tuple.Create<System.Object, System.Int32>(hunk.MessageShort
+
+ #line default
+ #line hidden
+, 1895), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 36 "..\..\Views\Repository\Blame.cshtml"
+ Write(hunk.MessageShort.ShortString(33));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span>\r\n </div>\r\n </td>\r\n <td><" +
+"pre");
+
+WriteLiteral(" class=\"blame-code\"");
+
+WriteLiteral("><code");
+
+WriteLiteral(" class=\"language no-highlight blame-code\"");
+
+WriteLiteral(">");
+
+
+ #line 39 "..\..\Views\Repository\Blame.cshtml"
+ Write(hunk.Code);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</code></pre></td>\r\n </tr>\r\n");
+
+
+ #line 41 "..\..\Views\Repository\Blame.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" </tbody>\r\n</table>\r\n");
+
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Repository/Blob.cshtml b/GitCandy.Web/Views/Repository/Blob.cshtml
new file mode 100644
index 0000000..f978f6e
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/Blob.cshtml
@@ -0,0 +1,49 @@
+@model GitCandy.Models.TreeEntryModel
+
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Repository_BlobTitle, Model.RepositoryName, Model.ReferenceName ?? Model.Sha.ToShortSha(), Model.Path));
+}
+
+<h4>@Html.ActionLink(Model.RepositoryName, "Tree", Html.OverRoute(new { path = "" }))</h4>
+
+@Html.Partial("_PathBar", Model.PathBar)
+@Html.Partial("_BranchSelector", Model.BranchSelector)
+
+<pre>@Model.Commit.CommitMessageShort</pre>
+<div class="row">
+ <div class="col-md-12">
+ <strong title="@Model.Commit.Author">@Model.Commit.Author.Name</strong>
+ <span>@SR.Repository_AuthoredAt</span>
+ <span title="@Model.Commit.Author.When">@Model.Commit.Author.When.LocalDateTime.ToFullString()</span>
+ @if (Model.Commit.Author != Model.Commit.Committer)
+ {
+ <strong title="@Model.Commit.Committer">@Model.Commit.Committer.Name</strong>
+ <span>@SR.Repository_CommittedAt</span>
+ <span title="@Model.Commit.Committer.When">@Model.Commit.Committer.When.LocalDateTime.ToFullString()</span>
+ }
+ </div>
+</div>
+<div class="row">
+ <div class="col-md-12">
+ <span>@Model.SizeString</span>
+ <div class="pull-right">
+ @Html.ActionLink(SR.Repository_History, "Commits", Html.OverRoute(new { path = (Model.ReferenceName ?? Model.Sha) + "/" + Model.Path }), new { @class = "btn btn-default" })
+ @Html.ActionLink(SR.Repository_Blame, "Blame", Html.OverRoute(new { path = (Model.ReferenceName ?? Model.Sha) + "/" + Model.Path }), new { @class = "btn btn-default hidden-xs" })
+ @Html.ActionLink(SR.Repository_Raw, "Raw", Html.OverRoute(new { path = (Model.ReferenceName ?? Model.Sha) + "/" + Model.Path }), new { @class = "btn btn-default" })
+ </div>
+ </div>
+</div>
+<div class="border-area">
+ <table class="table">
+ <caption>
+ <div class="pull-left keep-space"><i class="glyphicon glyphicon-list-alt"></i>@Model.Name</div>
+ </caption>
+ <tbody>
+ <tr>
+ <td>
+ @Html.Partial("_BlobPreview")
+ </td>
+ </tr>
+ </tbody>
+ </table>
+</div>
diff --git a/GitCandy.Web/Views/Repository/Blob.generated.cs b/GitCandy.Web/Views/Repository/Blob.generated.cs
new file mode 100644
index 0000000..d9ac3d9
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/Blob.generated.cs
@@ -0,0 +1,332 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Repository/Blob.cshtml")]
+ public partial class _Views_Repository_Blob_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.TreeEntryModel>
+ {
+ public _Views_Repository_Blob_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 3 "..\..\Views\Repository\Blob.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Repository_BlobTitle, Model.RepositoryName, Model.ReferenceName ?? Model.Sha.ToShortSha(), Model.Path));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<h4>");
+
+
+ #line 7 "..\..\Views\Repository\Blob.cshtml"
+Write(Html.ActionLink(Model.RepositoryName, "Tree", Html.OverRoute(new { path = "" })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h4>\r\n\r\n");
+
+
+ #line 9 "..\..\Views\Repository\Blob.cshtml"
+Write(Html.Partial("_PathBar", Model.PathBar));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n");
+
+
+ #line 10 "..\..\Views\Repository\Blob.cshtml"
+Write(Html.Partial("_BranchSelector", Model.BranchSelector));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<pre>");
+
+
+ #line 12 "..\..\Views\Repository\Blob.cshtml"
+Write(Model.Commit.CommitMessageShort);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</pre>\r\n<div");
+
+WriteLiteral(" class=\"row\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"col-md-12\"");
+
+WriteLiteral(">\r\n <strong");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 532), Tuple.Create("\"", 560)
+
+ #line 15 "..\..\Views\Repository\Blob.cshtml"
+, Tuple.Create(Tuple.Create("", 540), Tuple.Create<System.Object, System.Int32>(Model.Commit.Author
+
+ #line default
+ #line hidden
+, 540), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 15 "..\..\Views\Repository\Blob.cshtml"
+ Write(Model.Commit.Author.Name);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</strong>\r\n <span>");
+
+
+ #line 16 "..\..\Views\Repository\Blob.cshtml"
+ Write(SR.Repository_AuthoredAt);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span>\r\n <span");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 659), Tuple.Create("\"", 692)
+
+ #line 17 "..\..\Views\Repository\Blob.cshtml"
+, Tuple.Create(Tuple.Create("", 667), Tuple.Create<System.Object, System.Int32>(Model.Commit.Author.When
+
+ #line default
+ #line hidden
+, 667), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 17 "..\..\Views\Repository\Blob.cshtml"
+ Write(Model.Commit.Author.When.LocalDateTime.ToFullString());
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span>\r\n");
+
+
+ #line 18 "..\..\Views\Repository\Blob.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 18 "..\..\Views\Repository\Blob.cshtml"
+ if (Model.Commit.Author != Model.Commit.Committer)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <strong");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 848), Tuple.Create("\"", 879)
+
+ #line 20 "..\..\Views\Repository\Blob.cshtml"
+, Tuple.Create(Tuple.Create("", 856), Tuple.Create<System.Object, System.Int32>(Model.Commit.Committer
+
+ #line default
+ #line hidden
+, 856), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 20 "..\..\Views\Repository\Blob.cshtml"
+ Write(Model.Commit.Committer.Name);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</strong>\r\n");
+
+WriteLiteral(" <span>");
+
+
+ #line 21 "..\..\Views\Repository\Blob.cshtml"
+ Write(SR.Repository_CommittedAt);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span>\r\n");
+
+WriteLiteral(" <span");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 990), Tuple.Create("\"", 1026)
+
+ #line 22 "..\..\Views\Repository\Blob.cshtml"
+, Tuple.Create(Tuple.Create("", 998), Tuple.Create<System.Object, System.Int32>(Model.Commit.Committer.When
+
+ #line default
+ #line hidden
+, 998), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 22 "..\..\Views\Repository\Blob.cshtml"
+ Write(Model.Commit.Committer.When.LocalDateTime.ToFullString());
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span>\r\n");
+
+
+ #line 23 "..\..\Views\Repository\Blob.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" </div>\r\n</div>\r\n<div");
+
+WriteLiteral(" class=\"row\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"col-md-12\"");
+
+WriteLiteral(">\r\n <span>");
+
+
+ #line 28 "..\..\Views\Repository\Blob.cshtml"
+ Write(Model.SizeString);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span>\r\n <div");
+
+WriteLiteral(" class=\"pull-right\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 30 "..\..\Views\Repository\Blob.cshtml"
+ Write(Html.ActionLink(SR.Repository_History, "Commits", Html.OverRoute(new { path = (Model.ReferenceName ?? Model.Sha) + "/" + Model.Path }), new { @class = "btn btn-default" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 31 "..\..\Views\Repository\Blob.cshtml"
+ Write(Html.ActionLink(SR.Repository_Blame, "Blame", Html.OverRoute(new { path = (Model.ReferenceName ?? Model.Sha) + "/" + Model.Path }), new { @class = "btn btn-default hidden-xs" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 32 "..\..\Views\Repository\Blob.cshtml"
+ Write(Html.ActionLink(SR.Repository_Raw, "Raw", Html.OverRoute(new { path = (Model.ReferenceName ?? Model.Sha) + "/" + Model.Path }), new { @class = "btn btn-default" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n </div>\r\n</div>\r\n<div");
+
+WriteLiteral(" class=\"border-area\"");
+
+WriteLiteral(">\r\n <table");
+
+WriteLiteral(" class=\"table\"");
+
+WriteLiteral(">\r\n <caption>\r\n <div");
+
+WriteLiteral(" class=\"pull-left keep-space\"");
+
+WriteLiteral("><i");
+
+WriteLiteral(" class=\"glyphicon glyphicon-list-alt\"");
+
+WriteLiteral("></i>");
+
+
+ #line 39 "..\..\Views\Repository\Blob.cshtml"
+ Write(Model.Name);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n </caption>\r\n <tbody>\r\n <tr>\r\n <t" +
+"d>\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 44 "..\..\Views\Repository\Blob.cshtml"
+ Write(Html.Partial("_BlobPreview"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div" +
+">\r\n");
+
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Repository/Branches.cshtml b/GitCandy.Web/Views/Repository/Branches.cshtml
new file mode 100644
index 0000000..286a7cf
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/Branches.cshtml
@@ -0,0 +1,52 @@
+@model GitCandy.Models.BranchesModel
+
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Repository_BranchesTitle, Model));
+}
+
+<h4>@String.Format(SR.Repository_BranchesTitle, "") @Html.ActionLink(Model.RepositoryName, "Tree", Html.OverRoute(new { path = "" }))</h4>
+
+@if (Model.Commit == null)
+{
+ <div class="center">@SR.Repository_HeadNotSet</div>
+}
+else
+{
+ <table class="table table-hover">
+ <tbody>
+ <tr class="info">
+ <td>
+ <div>@Model.Commit.ReferenceName</div>
+ <strong title="@Model.Commit.Author">@Model.Commit.Author.Name</strong>
+ <span>@SR.Repository_AuthoredAt</span>
+ <span title="@Model.Commit.Author.When">@Model.Commit.Author.When.LocalDateTime.ToFullString()</span>
+ </td>
+ <td></td>
+ <td></td>
+ <td><strong>@SR.Repository_BaseBranch</strong></td>
+ </tr>
+ @foreach (var item in Model.AheadBehinds)
+ {
+ <tr>
+ <td>
+ <div>@Html.ActionLink(item.Commit.ReferenceName, "Tree", Html.OverRoute(new { path = item.Commit.ReferenceName }))</div>
+ <strong title="@item.Commit.Author">@Model.Commit.Author.Name</strong>
+ <span>@SR.Repository_AuthoredAt</span>
+ <span title="@item.Commit.Author.When">@item.Commit.Author.When.LocalDateTime.ToFullString()</span>
+ </td>
+ <td><p class="text-right">@item.Behind @SR.Repository_Behind</p></td>
+ <td><p class="text-left">@item.Ahead @SR.Repository_Ahead</p></td>
+ <td>@if (Model.CanDelete)
+ {<a class="btn btn-default" data-branch="@item.Commit.ReferenceName" href="#">@SR.Shared_Delete</a>}</td>
+ </tr>
+ }
+ </tbody>
+ </table>
+}
+
+<script type="text/javascript">
+ var deleteBranch_params = {
+ words: '@Html.Raw(SR.Repository_BranchDeletionWords)',
+ url: '@Url.Action("Branches", "Repository")'
+ };
+</script>
diff --git a/GitCandy.Web/Views/Repository/Branches.generated.cs b/GitCandy.Web/Views/Repository/Branches.generated.cs
new file mode 100644
index 0000000..79eb622
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/Branches.generated.cs
@@ -0,0 +1,398 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Repository/Branches.cshtml")]
+ public partial class _Views_Repository_Branches_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.BranchesModel>
+ {
+ public _Views_Repository_Branches_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 3 "..\..\Views\Repository\Branches.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Repository_BranchesTitle, Model));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<h4>");
+
+
+ #line 7 "..\..\Views\Repository\Branches.cshtml"
+Write(String.Format(SR.Repository_BranchesTitle, ""));
+
+
+ #line default
+ #line hidden
+WriteLiteral(" ");
+
+
+ #line 7 "..\..\Views\Repository\Branches.cshtml"
+ Write(Html.ActionLink(Model.RepositoryName, "Tree", Html.OverRoute(new { path = "" })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h4>\r\n\r\n");
+
+
+ #line 9 "..\..\Views\Repository\Branches.cshtml"
+ if (Model.Commit == null)
+{
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <div");
+
+WriteLiteral(" class=\"center\"");
+
+WriteLiteral(">");
+
+
+ #line 11 "..\..\Views\Repository\Branches.cshtml"
+ Write(SR.Repository_HeadNotSet);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n");
+
+
+ #line 12 "..\..\Views\Repository\Branches.cshtml"
+}
+else
+{
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <table");
+
+WriteLiteral(" class=\"table table-hover\"");
+
+WriteLiteral(">\r\n <tbody>\r\n <tr");
+
+WriteLiteral(" class=\"info\"");
+
+WriteLiteral(">\r\n <td>\r\n <div>");
+
+
+ #line 19 "..\..\Views\Repository\Branches.cshtml"
+ Write(Model.Commit.ReferenceName);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n <strong");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 597), Tuple.Create("\"", 625)
+
+ #line 20 "..\..\Views\Repository\Branches.cshtml"
+, Tuple.Create(Tuple.Create("", 605), Tuple.Create<System.Object, System.Int32>(Model.Commit.Author
+
+ #line default
+ #line hidden
+, 605), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 20 "..\..\Views\Repository\Branches.cshtml"
+ Write(Model.Commit.Author.Name);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</strong>\r\n <span>");
+
+
+ #line 21 "..\..\Views\Repository\Branches.cshtml"
+ Write(SR.Repository_AuthoredAt);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span>\r\n <span");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 748), Tuple.Create("\"", 781)
+
+ #line 22 "..\..\Views\Repository\Branches.cshtml"
+, Tuple.Create(Tuple.Create("", 756), Tuple.Create<System.Object, System.Int32>(Model.Commit.Author.When
+
+ #line default
+ #line hidden
+, 756), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 22 "..\..\Views\Repository\Branches.cshtml"
+ Write(Model.Commit.Author.When.LocalDateTime.ToFullString());
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span>\r\n </td>\r\n <td></td>\r\n <td></" +
+"td>\r\n <td><strong>");
+
+
+ #line 26 "..\..\Views\Repository\Branches.cshtml"
+ Write(SR.Repository_BaseBranch);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</strong></td>\r\n </tr>\r\n");
+
+
+ #line 28 "..\..\Views\Repository\Branches.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 28 "..\..\Views\Repository\Branches.cshtml"
+ foreach (var item in Model.AheadBehinds)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <tr>\r\n <td>\r\n <div>");
+
+
+ #line 32 "..\..\Views\Repository\Branches.cshtml"
+ Write(Html.ActionLink(item.Commit.ReferenceName, "Tree", Html.OverRoute(new { path = item.Commit.ReferenceName })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n <strong");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 1306), Tuple.Create("\"", 1333)
+
+ #line 33 "..\..\Views\Repository\Branches.cshtml"
+, Tuple.Create(Tuple.Create("", 1314), Tuple.Create<System.Object, System.Int32>(item.Commit.Author
+
+ #line default
+ #line hidden
+, 1314), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 33 "..\..\Views\Repository\Branches.cshtml"
+ Write(Model.Commit.Author.Name);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</strong>\r\n <span>");
+
+
+ #line 34 "..\..\Views\Repository\Branches.cshtml"
+ Write(SR.Repository_AuthoredAt);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span>\r\n <span");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 1464), Tuple.Create("\"", 1496)
+
+ #line 35 "..\..\Views\Repository\Branches.cshtml"
+, Tuple.Create(Tuple.Create("", 1472), Tuple.Create<System.Object, System.Int32>(item.Commit.Author.When
+
+ #line default
+ #line hidden
+, 1472), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 35 "..\..\Views\Repository\Branches.cshtml"
+ Write(item.Commit.Author.When.LocalDateTime.ToFullString());
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span>\r\n </td>\r\n <td><p");
+
+WriteLiteral(" class=\"text-right\"");
+
+WriteLiteral(">");
+
+
+ #line 37 "..\..\Views\Repository\Branches.cshtml"
+ Write(item.Behind);
+
+
+ #line default
+ #line hidden
+WriteLiteral(" ");
+
+
+ #line 37 "..\..\Views\Repository\Branches.cshtml"
+ Write(SR.Repository_Behind);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</p></td>\r\n <td><p");
+
+WriteLiteral(" class=\"text-left\"");
+
+WriteLiteral(">");
+
+
+ #line 38 "..\..\Views\Repository\Branches.cshtml"
+ Write(item.Ahead);
+
+
+ #line default
+ #line hidden
+WriteLiteral(" ");
+
+
+ #line 38 "..\..\Views\Repository\Branches.cshtml"
+ Write(SR.Repository_Ahead);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</p></td>\r\n <td>");
+
+
+ #line 39 "..\..\Views\Repository\Branches.cshtml"
+ if (Model.CanDelete)
+ {
+
+ #line default
+ #line hidden
+WriteLiteral("<a");
+
+WriteLiteral(" class=\"btn btn-default\"");
+
+WriteLiteral(" data-branch=\"");
+
+
+ #line 40 "..\..\Views\Repository\Branches.cshtml"
+ Write(item.Commit.ReferenceName);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral(" href=\"#\"");
+
+WriteLiteral(">");
+
+
+ #line 40 "..\..\Views\Repository\Branches.cshtml"
+ Write(SR.Shared_Delete);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</a>");
+
+
+ #line 40 "..\..\Views\Repository\Branches.cshtml"
+ }
+
+ #line default
+ #line hidden
+WriteLiteral("</td>\r\n </tr>\r\n");
+
+
+ #line 42 "..\..\Views\Repository\Branches.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" </tbody>\r\n </table>\r\n");
+
+
+ #line 45 "..\..\Views\Repository\Branches.cshtml"
+}
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n<script");
+
+WriteLiteral(" type=\"text/javascript\"");
+
+WriteLiteral(">\r\n var deleteBranch_params = {\r\n words: \'");
+
+
+ #line 49 "..\..\Views\Repository\Branches.cshtml"
+ Write(Html.Raw(SR.Repository_BranchDeletionWords));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\',\r\n url: \'");
+
+
+ #line 50 "..\..\Views\Repository\Branches.cshtml"
+ Write(Url.Action("Branches", "Repository"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\'\r\n };\r\n</script>\r\n");
+
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Repository/Commit.cshtml b/GitCandy.Web/Views/Repository/Commit.cshtml
new file mode 100644
index 0000000..cff1ecd
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/Commit.cshtml
@@ -0,0 +1,41 @@
+@model GitCandy.Models.CommitModel
+
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Repository_CommitTitle, Model.RepositoryName, Model.ReferenceName ?? Model.Sha.ToShortSha(), Model.CommitMessageShort));
+}
+
+<h4>@Html.ActionLink(Model.RepositoryName, "Tree", Html.OverRoute(new { path = "" }))</h4>
+
+@Html.Partial("_PathBar", Model.PathBar)
+
+<div class="row">
+ <div class="col-md-9">
+ <pre>@Model.CommitMessage</pre>
+ <strong title="@Model.Author">@Model.Author.Name</strong>
+ <span>@SR.Repository_AuthoredAt</span>
+ <span title="@Model.Author.When">@Model.Author.When.LocalDateTime.ToFullString()</span>
+ @if (Model.Author != Model.Committer)
+ {
+ <strong title="@Model.Committer">@Model.Committer.Name</strong>
+ <span>@SR.Repository_CommittedAt</span>
+ <span title="@Model.Committer.When">@Model.Committer.When.LocalDateTime.ToFullString()</span>
+ }
+ </div>
+
+ <div class="col-md-3 text-right">
+ <div class="">@Html.ActionLink(Model.Sha.ToShortSha(), "Commit", Html.OverRoute(new { path = Model.Sha }))</div>
+ <div class="">@Html.ActionLink(SR.Repository_Tree, "Tree", Html.OverRoute(new { path = Model.Sha }))</div>
+ @Model.Parents.Length @SR.Repository_Parents
+ @for (var index = 0; index < Model.Parents.Length; index++)
+ {
+ if (index > 0)
+ {
+ @Html.Raw(" + ")
+ }
+ var parent = Model.Parents[index];
+ @Html.ActionLink(parent.ToShortSha(), "Commit", Html.OverRoute(new { path = parent }))
+ }
+ </div>
+</div>
+
+@Html.Partial("_Diff", Model)
diff --git a/GitCandy.Web/Views/Repository/Commit.generated.cs b/GitCandy.Web/Views/Repository/Commit.generated.cs
new file mode 100644
index 0000000..884a4fb
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/Commit.generated.cs
@@ -0,0 +1,339 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Repository/Commit.cshtml")]
+ public partial class _Views_Repository_Commit_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.CommitModel>
+ {
+ public _Views_Repository_Commit_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 3 "..\..\Views\Repository\Commit.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Repository_CommitTitle, Model.RepositoryName, Model.ReferenceName ?? Model.Sha.ToShortSha(), Model.CommitMessageShort));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<h4>");
+
+
+ #line 7 "..\..\Views\Repository\Commit.cshtml"
+Write(Html.ActionLink(Model.RepositoryName, "Tree", Html.OverRoute(new { path = "" })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h4>\r\n\r\n");
+
+
+ #line 9 "..\..\Views\Repository\Commit.cshtml"
+Write(Html.Partial("_PathBar", Model.PathBar));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<div");
+
+WriteLiteral(" class=\"row\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"col-md-9\"");
+
+WriteLiteral(">\r\n <pre>");
+
+
+ #line 13 "..\..\Views\Repository\Commit.cshtml"
+ Write(Model.CommitMessage);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</pre>\r\n <strong");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 484), Tuple.Create("\"", 505)
+
+ #line 14 "..\..\Views\Repository\Commit.cshtml"
+, Tuple.Create(Tuple.Create("", 492), Tuple.Create<System.Object, System.Int32>(Model.Author
+
+ #line default
+ #line hidden
+, 492), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 14 "..\..\Views\Repository\Commit.cshtml"
+ Write(Model.Author.Name);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</strong>\r\n <span>");
+
+
+ #line 15 "..\..\Views\Repository\Commit.cshtml"
+ Write(SR.Repository_AuthoredAt);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span>\r\n <span");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 597), Tuple.Create("\"", 623)
+
+ #line 16 "..\..\Views\Repository\Commit.cshtml"
+, Tuple.Create(Tuple.Create("", 605), Tuple.Create<System.Object, System.Int32>(Model.Author.When
+
+ #line default
+ #line hidden
+, 605), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 16 "..\..\Views\Repository\Commit.cshtml"
+ Write(Model.Author.When.LocalDateTime.ToFullString());
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span>\r\n");
+
+
+ #line 17 "..\..\Views\Repository\Commit.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 17 "..\..\Views\Repository\Commit.cshtml"
+ if (Model.Author != Model.Committer)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <strong");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 758), Tuple.Create("\"", 782)
+
+ #line 19 "..\..\Views\Repository\Commit.cshtml"
+, Tuple.Create(Tuple.Create("", 766), Tuple.Create<System.Object, System.Int32>(Model.Committer
+
+ #line default
+ #line hidden
+, 766), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 19 "..\..\Views\Repository\Commit.cshtml"
+ Write(Model.Committer.Name);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</strong>\r\n");
+
+WriteLiteral(" <span>");
+
+
+ #line 20 "..\..\Views\Repository\Commit.cshtml"
+ Write(SR.Repository_CommittedAt);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span>\r\n");
+
+WriteLiteral(" <span");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 886), Tuple.Create("\"", 915)
+
+ #line 21 "..\..\Views\Repository\Commit.cshtml"
+, Tuple.Create(Tuple.Create("", 894), Tuple.Create<System.Object, System.Int32>(Model.Committer.When
+
+ #line default
+ #line hidden
+, 894), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 21 "..\..\Views\Repository\Commit.cshtml"
+ Write(Model.Committer.When.LocalDateTime.ToFullString());
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span>\r\n");
+
+
+ #line 22 "..\..\Views\Repository\Commit.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" </div>\r\n\r\n <div");
+
+WriteLiteral(" class=\"col-md-3 text-right\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"\"");
+
+WriteLiteral(">");
+
+
+ #line 26 "..\..\Views\Repository\Commit.cshtml"
+ Write(Html.ActionLink(Model.Sha.ToShortSha(), "Commit", Html.OverRoute(new { path = Model.Sha })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n <div");
+
+WriteLiteral(" class=\"\"");
+
+WriteLiteral(">");
+
+
+ #line 27 "..\..\Views\Repository\Commit.cshtml"
+ Write(Html.ActionLink(SR.Repository_Tree, "Tree", Html.OverRoute(new { path = Model.Sha })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 28 "..\..\Views\Repository\Commit.cshtml"
+ Write(Model.Parents.Length);
+
+
+ #line default
+ #line hidden
+WriteLiteral(" ");
+
+
+ #line 28 "..\..\Views\Repository\Commit.cshtml"
+ Write(SR.Repository_Parents);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n");
+
+
+ #line 29 "..\..\Views\Repository\Commit.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 29 "..\..\Views\Repository\Commit.cshtml"
+ for (var index = 0; index < Model.Parents.Length; index++)
+ {
+ if (index > 0)
+ {
+
+
+ #line default
+ #line hidden
+
+ #line 33 "..\..\Views\Repository\Commit.cshtml"
+ Write(Html.Raw(" + "));
+
+
+ #line default
+ #line hidden
+
+ #line 33 "..\..\Views\Repository\Commit.cshtml"
+
+ }
+ var parent = Model.Parents[index];
+
+
+ #line default
+ #line hidden
+
+ #line 36 "..\..\Views\Repository\Commit.cshtml"
+ Write(Html.ActionLink(parent.ToShortSha(), "Commit", Html.OverRoute(new { path = parent })));
+
+
+ #line default
+ #line hidden
+
+ #line 36 "..\..\Views\Repository\Commit.cshtml"
+
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" </div>\r\n</div>\r\n\r\n");
+
+
+ #line 41 "..\..\Views\Repository\Commit.cshtml"
+Write(Html.Partial("_Diff", Model));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n");
+
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Repository/Commits.cshtml b/GitCandy.Web/Views/Repository/Commits.cshtml
new file mode 100644
index 0000000..e5e331c
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/Commits.cshtml
@@ -0,0 +1,34 @@
+@model GitCandy.Models.CommitsModel
+
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Repository_CommitsTitle, Model.RepositoryName ?? Model.Sha.ToShortSha(), Model.Path));
+}
+
+<h4>@SR.Repository_HistoryFor @Html.ActionLink(Model.RepositoryName, "Tree", Html.OverRoute(new { path = "" }))</h4>
+
+@Html.Partial("_PathBar", Model.PathBar)
+
+@foreach (var commit in Model.Commits)
+{
+ <div class="border-area">
+ <div class="row">
+ <div class="col-md-9">
+ <div title="@commit.CommitMessageShort">@Html.ActionLink(commit.CommitMessageShort.ShortString(100), "Commit", Html.OverRoute(new { path = commit.Sha + "/" + Model.Path }))</div>
+ <strong title="@commit.Author">@Html.Link(commit.Author)</strong>
+ <span>@SR.Repository_AuthoredAt</span>
+ <span title="@commit.Author.When">@commit.Author.When.LocalDateTime.ToFullString()</span>
+ @if (commit.Author != commit.Committer)
+ {
+ <strong title="@commit.Committer">@Html.Link(commit.Committer)</strong>
+ <span>@SR.Repository_CommittedAt</span>
+ <span title="@commit.Committer.When">@commit.Committer.When.LocalDateTime.ToFullString()</span>
+ }
+ </div>
+ <div class="col-md-3">
+ <div class="text-right">@Html.ActionLink(commit.Sha.ToShortSha(), "Commit", Html.OverRoute(new { path = commit.Sha }))</div>
+ <div class="text-right">@Html.ActionLink(SR.Repository_Tree, "Tree", Html.OverRoute(new { path = commit.Sha }))</div>
+ </div>
+ </div>
+ </div>
+}
+@Html.Partial("_Pager")
diff --git a/GitCandy.Web/Views/Repository/Commits.generated.cs b/GitCandy.Web/Views/Repository/Commits.generated.cs
new file mode 100644
index 0000000..56266a9
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/Commits.generated.cs
@@ -0,0 +1,312 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Repository/Commits.cshtml")]
+ public partial class _Views_Repository_Commits_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.CommitsModel>
+ {
+ public _Views_Repository_Commits_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 3 "..\..\Views\Repository\Commits.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Repository_CommitsTitle, Model.RepositoryName ?? Model.Sha.ToShortSha(), Model.Path));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<h4>");
+
+
+ #line 7 "..\..\Views\Repository\Commits.cshtml"
+Write(SR.Repository_HistoryFor);
+
+
+ #line default
+ #line hidden
+WriteLiteral(" ");
+
+
+ #line 7 "..\..\Views\Repository\Commits.cshtml"
+ Write(Html.ActionLink(Model.RepositoryName, "Tree", Html.OverRoute(new { path = "" })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h4>\r\n\r\n");
+
+
+ #line 9 "..\..\Views\Repository\Commits.cshtml"
+Write(Html.Partial("_PathBar", Model.PathBar));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n");
+
+
+ #line 11 "..\..\Views\Repository\Commits.cshtml"
+ foreach (var commit in Model.Commits)
+{
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <div");
+
+WriteLiteral(" class=\"border-area\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"row\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"col-md-9\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 531), Tuple.Create("\"", 565)
+
+ #line 16 "..\..\Views\Repository\Commits.cshtml"
+, Tuple.Create(Tuple.Create("", 539), Tuple.Create<System.Object, System.Int32>(commit.CommitMessageShort
+
+ #line default
+ #line hidden
+, 539), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 16 "..\..\Views\Repository\Commits.cshtml"
+ Write(Html.ActionLink(commit.CommitMessageShort.ShortString(100), "Commit", Html.OverRoute(new { path = commit.Sha + "/" + Model.Path })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n <strong");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 730), Tuple.Create("\"", 752)
+
+ #line 17 "..\..\Views\Repository\Commits.cshtml"
+, Tuple.Create(Tuple.Create("", 738), Tuple.Create<System.Object, System.Int32>(commit.Author
+
+ #line default
+ #line hidden
+, 738), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 17 "..\..\Views\Repository\Commits.cshtml"
+ Write(Html.Link(commit.Author));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</strong>\r\n <span>");
+
+
+ #line 18 "..\..\Views\Repository\Commits.cshtml"
+ Write(SR.Repository_AuthoredAt);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span>\r\n <span");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 867), Tuple.Create("\"", 894)
+
+ #line 19 "..\..\Views\Repository\Commits.cshtml"
+, Tuple.Create(Tuple.Create("", 875), Tuple.Create<System.Object, System.Int32>(commit.Author.When
+
+ #line default
+ #line hidden
+, 875), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 19 "..\..\Views\Repository\Commits.cshtml"
+ Write(commit.Author.When.LocalDateTime.ToFullString());
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span>\r\n");
+
+
+ #line 20 "..\..\Views\Repository\Commits.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 20 "..\..\Views\Repository\Commits.cshtml"
+ if (commit.Author != commit.Committer)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <strong");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 1056), Tuple.Create("\"", 1081)
+
+ #line 22 "..\..\Views\Repository\Commits.cshtml"
+, Tuple.Create(Tuple.Create("", 1064), Tuple.Create<System.Object, System.Int32>(commit.Committer
+
+ #line default
+ #line hidden
+, 1064), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 22 "..\..\Views\Repository\Commits.cshtml"
+ Write(Html.Link(commit.Committer));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</strong>\r\n");
+
+WriteLiteral(" <span>");
+
+
+ #line 23 "..\..\Views\Repository\Commits.cshtml"
+ Write(SR.Repository_CommittedAt);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span>\r\n");
+
+WriteLiteral(" <span");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 1208), Tuple.Create("\"", 1238)
+
+ #line 24 "..\..\Views\Repository\Commits.cshtml"
+, Tuple.Create(Tuple.Create("", 1216), Tuple.Create<System.Object, System.Int32>(commit.Committer.When
+
+ #line default
+ #line hidden
+, 1216), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 24 "..\..\Views\Repository\Commits.cshtml"
+ Write(commit.Committer.When.LocalDateTime.ToFullString());
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span>\r\n");
+
+
+ #line 25 "..\..\Views\Repository\Commits.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" </div>\r\n <div");
+
+WriteLiteral(" class=\"col-md-3\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"text-right\"");
+
+WriteLiteral(">");
+
+
+ #line 28 "..\..\Views\Repository\Commits.cshtml"
+ Write(Html.ActionLink(commit.Sha.ToShortSha(), "Commit", Html.OverRoute(new { path = commit.Sha })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n <div");
+
+WriteLiteral(" class=\"text-right\"");
+
+WriteLiteral(">");
+
+
+ #line 29 "..\..\Views\Repository\Commits.cshtml"
+ Write(Html.ActionLink(SR.Repository_Tree, "Tree", Html.OverRoute(new { path = commit.Sha })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n </div>\r\n </div>\r\n </div>\r\n");
+
+
+ #line 33 "..\..\Views\Repository\Commits.cshtml"
+}
+
+
+ #line default
+ #line hidden
+
+ #line 34 "..\..\Views\Repository\Commits.cshtml"
+Write(Html.Partial("_Pager"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n");
+
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Repository/Compare.cshtml b/GitCandy.Web/Views/Repository/Compare.cshtml
new file mode 100644
index 0000000..c551ad9
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/Compare.cshtml
@@ -0,0 +1,43 @@
+@model GitCandy.Models.CompareModel
+
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Repository_CompareTitle, Model.RepositoryName));
+}
+
+<h4>@Html.ActionLink(Model.RepositoryName, "Tree", Html.OverRoute(new { path = "" }))</h4>
+
+<div class="row">
+ <div class="col-md-3 branch-from">
+ @Html.Partial("_BranchSelector", Model.BaseBranchSelector)
+ </div>
+ <div class="col-md-3 branch-to">
+ @Html.Partial("_BranchSelector", Model.CompareBranchSelector)
+ </div>
+ <div class="col-md-1">
+ <button class="branch-compare btn btn-primary">@SR.Repository_Compare</button>
+ </div>
+</div>
+
+@if (Model.Walks == null || Model.Walks.Length == 0)
+{
+ @SR.Repository_CompareNothing
+}
+else
+{
+ <div class="border-area table-responsive">
+ <table class="table table-hover">
+ <tbody>
+ @foreach (var commit in Model.Walks)
+ {
+ <tr>
+ <td><span title="@commit.Committer">@commit.Committer.Name.ShortString(20)</span></td>
+ <td><span title="@commit.Committer.When">@commit.Committer.When.LocalDateTime.ToFullString()</span></td>
+ <td>@Html.ActionLink(commit.CommitMessageShort.ShortString(80), "Commit", Html.OverRoute(new { path = commit.Sha }))</td>
+ </tr>
+ }
+ </tbody>
+ </table>
+ </div>
+
+ @Html.Partial("_Diff", Model.CompareResult)
+}
diff --git a/GitCandy.Web/Views/Repository/Compare.generated.cs b/GitCandy.Web/Views/Repository/Compare.generated.cs
new file mode 100644
index 0000000..324294b
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/Compare.generated.cs
@@ -0,0 +1,258 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Repository/Compare.cshtml")]
+ public partial class _Views_Repository_Compare_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.CompareModel>
+ {
+ public _Views_Repository_Compare_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 3 "..\..\Views\Repository\Compare.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Repository_CompareTitle, Model.RepositoryName));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<h4>");
+
+
+ #line 7 "..\..\Views\Repository\Compare.cshtml"
+Write(Html.ActionLink(Model.RepositoryName, "Tree", Html.OverRoute(new { path = "" })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h4>\r\n\r\n<div");
+
+WriteLiteral(" class=\"row\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"col-md-3 branch-from\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 11 "..\..\Views\Repository\Compare.cshtml"
+ Write(Html.Partial("_BranchSelector", Model.BaseBranchSelector));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n <div");
+
+WriteLiteral(" class=\"col-md-3 branch-to\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 14 "..\..\Views\Repository\Compare.cshtml"
+ Write(Html.Partial("_BranchSelector", Model.CompareBranchSelector));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n <div");
+
+WriteLiteral(" class=\"col-md-1\"");
+
+WriteLiteral(">\r\n <button");
+
+WriteLiteral(" class=\"branch-compare btn btn-primary\"");
+
+WriteLiteral(">");
+
+
+ #line 17 "..\..\Views\Repository\Compare.cshtml"
+ Write(SR.Repository_Compare);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</button>\r\n </div>\r\n</div>\r\n\r\n");
+
+
+ #line 21 "..\..\Views\Repository\Compare.cshtml"
+ if (Model.Walks == null || Model.Walks.Length == 0)
+{
+
+
+ #line default
+ #line hidden
+
+ #line 23 "..\..\Views\Repository\Compare.cshtml"
+Write(SR.Repository_CompareNothing);
+
+
+ #line default
+ #line hidden
+
+ #line 23 "..\..\Views\Repository\Compare.cshtml"
+
+}
+else
+{
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <div");
+
+WriteLiteral(" class=\"border-area table-responsive\"");
+
+WriteLiteral(">\r\n <table");
+
+WriteLiteral(" class=\"table table-hover\"");
+
+WriteLiteral(">\r\n <tbody>\r\n");
+
+
+ #line 30 "..\..\Views\Repository\Compare.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 30 "..\..\Views\Repository\Compare.cshtml"
+ foreach (var commit in Model.Walks)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <tr>\r\n <td><span");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 1012), Tuple.Create("\"", 1037)
+
+ #line 33 "..\..\Views\Repository\Compare.cshtml"
+, Tuple.Create(Tuple.Create("", 1020), Tuple.Create<System.Object, System.Int32>(commit.Committer
+
+ #line default
+ #line hidden
+, 1020), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 33 "..\..\Views\Repository\Compare.cshtml"
+ Write(commit.Committer.Name.ShortString(20));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span></td>\r\n <td><span");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 1124), Tuple.Create("\"", 1154)
+
+ #line 34 "..\..\Views\Repository\Compare.cshtml"
+, Tuple.Create(Tuple.Create("", 1132), Tuple.Create<System.Object, System.Int32>(commit.Committer.When
+
+ #line default
+ #line hidden
+, 1132), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 34 "..\..\Views\Repository\Compare.cshtml"
+ Write(commit.Committer.When.LocalDateTime.ToFullString());
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span></td>\r\n <td>");
+
+
+ #line 35 "..\..\Views\Repository\Compare.cshtml"
+ Write(Html.ActionLink(commit.CommitMessageShort.ShortString(80), "Commit", Html.OverRoute(new { path = commit.Sha })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td>\r\n </tr>\r\n");
+
+
+ #line 37 "..\..\Views\Repository\Compare.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" </tbody>\r\n </table>\r\n </div>\r\n");
+
+
+ #line 41 "..\..\Views\Repository\Compare.cshtml"
+
+
+
+ #line default
+ #line hidden
+
+ #line 42 "..\..\Views\Repository\Compare.cshtml"
+Write(Html.Partial("_Diff", Model.CompareResult));
+
+
+ #line default
+ #line hidden
+
+ #line 42 "..\..\Views\Repository\Compare.cshtml"
+
+}
+
+
+ #line default
+ #line hidden
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Repository/Contributors.cshtml b/GitCandy.Web/Views/Repository/Contributors.cshtml
new file mode 100644
index 0000000..03ce5a2
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/Contributors.cshtml
@@ -0,0 +1,42 @@
+@model GitCandy.Models.ContributorsModel
+
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Repository_ContributorsTitle, Model));
+}
+
+<h4>@String.Format(SR.Repository_ContributorsTitle, "") @Html.ActionLink(Model.RepositoryName, "Tree", Html.OverRoute(new { path = "" }))</h4>
+
+<div class="col-md-5">
+ @foreach (var item in Model.Statistics.Current.OrderedCommits)
+ {
+ <div class="row">
+ <div class="border-area">
+ <div>@item.Author</div>
+ <div>@item.CommitsCount @SR.Repository_Commits</div>
+ </div>
+ </div>
+ }
+</div>
+<div class="col-md-5 offset1 pull-right">
+ <table class="table">
+ <caption>@SR.Repository_Statistics</caption>
+ <tbody>
+ @if (Model.Statistics.Default != null)
+ {
+ <tr><td>@SR.Repository_DefaultBranch</td><td>@Model.Statistics.Default.Branch</td></tr>
+ <tr><td>@SR.Repository_DefaultCommits</td><td>@Model.Statistics.Default.NumberOfCommits</td></tr>
+ <tr><td>@SR.Repository_DefaultContributors</td><td>@Model.Statistics.Default.NumberOfContributors</td></tr>
+ <tr><td>@SR.Repository_DefaultFiles</td><td>@Model.Statistics.Default.NumberOfFiles</td></tr>
+ <tr><td>@SR.Repository_DefaultSourceSize</td><td>@FileHelper.GetSizeString(Model.Statistics.Default.SizeOfSource)</td></tr>
+ <tr><td></td><td></td></tr>
+ }
+ <tr><td>@SR.Repository_CurrentBranch</td><td>@Model.Statistics.Current.Branch</td></tr>
+ <tr><td>@SR.Repository_CurrentCommits</td><td>@Model.Statistics.Current.NumberOfCommits</td></tr>
+ <tr><td>@SR.Repository_CurrentContributors</td><td>@Model.Statistics.Current.NumberOfContributors</td></tr>
+ <tr><td>@SR.Repository_CurrentFiles</td><td>@Model.Statistics.Current.NumberOfFiles</td></tr>
+ <tr><td>@SR.Repository_CurrentSourceSize</td><td>@FileHelper.GetSizeString(Model.Statistics.Current.SizeOfSource)</td></tr>
+ <tr><td></td><td></td></tr>
+ <tr><td>@SR.Repository_RepositorySize</td><td>@FileHelper.GetSizeString(Model.Statistics.RepositorySize)</td></tr>
+ </tbody>
+ </table>
+</div>
diff --git a/GitCandy.Web/Views/Repository/Contributors.generated.cs b/GitCandy.Web/Views/Repository/Contributors.generated.cs
new file mode 100644
index 0000000..0e4c5f4
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/Contributors.generated.cs
@@ -0,0 +1,397 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Repository/Contributors.cshtml")]
+ public partial class _Views_Repository_Contributors_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.ContributorsModel>
+ {
+ public _Views_Repository_Contributors_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 3 "..\..\Views\Repository\Contributors.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Repository_ContributorsTitle, Model));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<h4>");
+
+
+ #line 7 "..\..\Views\Repository\Contributors.cshtml"
+Write(String.Format(SR.Repository_ContributorsTitle, ""));
+
+
+ #line default
+ #line hidden
+WriteLiteral(" ");
+
+
+ #line 7 "..\..\Views\Repository\Contributors.cshtml"
+ Write(Html.ActionLink(Model.RepositoryName, "Tree", Html.OverRoute(new { path = "" })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h4>\r\n\r\n<div");
+
+WriteLiteral(" class=\"col-md-5\"");
+
+WriteLiteral(">\r\n");
+
+
+ #line 10 "..\..\Views\Repository\Contributors.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 10 "..\..\Views\Repository\Contributors.cshtml"
+ foreach (var item in Model.Statistics.Current.OrderedCommits)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <div");
+
+WriteLiteral(" class=\"row\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"border-area\"");
+
+WriteLiteral(">\r\n <div>");
+
+
+ #line 14 "..\..\Views\Repository\Contributors.cshtml"
+ Write(item.Author);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n <div>");
+
+
+ #line 15 "..\..\Views\Repository\Contributors.cshtml"
+ Write(item.CommitsCount);
+
+
+ #line default
+ #line hidden
+WriteLiteral(" ");
+
+
+ #line 15 "..\..\Views\Repository\Contributors.cshtml"
+ Write(SR.Repository_Commits);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n </div>\r\n </div>\r\n");
+
+
+ #line 18 "..\..\Views\Repository\Contributors.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n<div");
+
+WriteLiteral(" class=\"col-md-5 offset1 pull-right\"");
+
+WriteLiteral(">\r\n <table");
+
+WriteLiteral(" class=\"table\"");
+
+WriteLiteral(">\r\n <caption>");
+
+
+ #line 22 "..\..\Views\Repository\Contributors.cshtml"
+ Write(SR.Repository_Statistics);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</caption>\r\n <tbody>\r\n");
+
+
+ #line 24 "..\..\Views\Repository\Contributors.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 24 "..\..\Views\Repository\Contributors.cshtml"
+ if (Model.Statistics.Default != null)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <tr><td>");
+
+
+ #line 26 "..\..\Views\Repository\Contributors.cshtml"
+ Write(SR.Repository_DefaultBranch);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td><td>");
+
+
+ #line 26 "..\..\Views\Repository\Contributors.cshtml"
+ Write(Model.Statistics.Default.Branch);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td></tr>\r\n");
+
+WriteLiteral(" <tr><td>");
+
+
+ #line 27 "..\..\Views\Repository\Contributors.cshtml"
+ Write(SR.Repository_DefaultCommits);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td><td>");
+
+
+ #line 27 "..\..\Views\Repository\Contributors.cshtml"
+ Write(Model.Statistics.Default.NumberOfCommits);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td></tr>\r\n");
+
+WriteLiteral(" <tr><td>");
+
+
+ #line 28 "..\..\Views\Repository\Contributors.cshtml"
+ Write(SR.Repository_DefaultContributors);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td><td>");
+
+
+ #line 28 "..\..\Views\Repository\Contributors.cshtml"
+ Write(Model.Statistics.Default.NumberOfContributors);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td></tr>\r\n");
+
+WriteLiteral(" <tr><td>");
+
+
+ #line 29 "..\..\Views\Repository\Contributors.cshtml"
+ Write(SR.Repository_DefaultFiles);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td><td>");
+
+
+ #line 29 "..\..\Views\Repository\Contributors.cshtml"
+ Write(Model.Statistics.Default.NumberOfFiles);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td></tr>\r\n");
+
+WriteLiteral(" <tr><td>");
+
+
+ #line 30 "..\..\Views\Repository\Contributors.cshtml"
+ Write(SR.Repository_DefaultSourceSize);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td><td>");
+
+
+ #line 30 "..\..\Views\Repository\Contributors.cshtml"
+ Write(FileHelper.GetSizeString(Model.Statistics.Default.SizeOfSource));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td></tr>\r\n");
+
+WriteLiteral(" <tr><td></td><td></td></tr>\r\n");
+
+
+ #line 32 "..\..\Views\Repository\Contributors.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <tr><td>");
+
+
+ #line 33 "..\..\Views\Repository\Contributors.cshtml"
+ Write(SR.Repository_CurrentBranch);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td><td>");
+
+
+ #line 33 "..\..\Views\Repository\Contributors.cshtml"
+ Write(Model.Statistics.Current.Branch);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td></tr>\r\n <tr><td>");
+
+
+ #line 34 "..\..\Views\Repository\Contributors.cshtml"
+ Write(SR.Repository_CurrentCommits);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td><td>");
+
+
+ #line 34 "..\..\Views\Repository\Contributors.cshtml"
+ Write(Model.Statistics.Current.NumberOfCommits);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td></tr>\r\n <tr><td>");
+
+
+ #line 35 "..\..\Views\Repository\Contributors.cshtml"
+ Write(SR.Repository_CurrentContributors);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td><td>");
+
+
+ #line 35 "..\..\Views\Repository\Contributors.cshtml"
+ Write(Model.Statistics.Current.NumberOfContributors);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td></tr>\r\n <tr><td>");
+
+
+ #line 36 "..\..\Views\Repository\Contributors.cshtml"
+ Write(SR.Repository_CurrentFiles);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td><td>");
+
+
+ #line 36 "..\..\Views\Repository\Contributors.cshtml"
+ Write(Model.Statistics.Current.NumberOfFiles);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td></tr>\r\n <tr><td>");
+
+
+ #line 37 "..\..\Views\Repository\Contributors.cshtml"
+ Write(SR.Repository_CurrentSourceSize);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td><td>");
+
+
+ #line 37 "..\..\Views\Repository\Contributors.cshtml"
+ Write(FileHelper.GetSizeString(Model.Statistics.Current.SizeOfSource));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td></tr>\r\n <tr><td></td><td></td></tr>\r\n <tr><td>");
+
+
+ #line 39 "..\..\Views\Repository\Contributors.cshtml"
+ Write(SR.Repository_RepositorySize);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td><td>");
+
+
+ #line 39 "..\..\Views\Repository\Contributors.cshtml"
+ Write(FileHelper.GetSizeString(Model.Statistics.RepositorySize));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td></tr>\r\n </tbody>\r\n </table>\r\n</div>\r\n");
+
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Repository/Coop.cshtml b/GitCandy.Web/Views/Repository/Coop.cshtml
new file mode 100644
index 0000000..9655f0c
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/Coop.cshtml
@@ -0,0 +1,88 @@
+@model GitCandy.Models.CollaborationModel
+@using NewLife.Serialization;
+
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Repository_CollaborationTitle, Model.RepositoryName));
+}
+
+<h4>@String.Format(SR.Repository_CollaborationTitle, Model.RepositoryName)</h4>
+
+@if (Model != null)
+{
+ <div class="row">
+ <div class="col-md-6">
+ <span>@SR.Shared_Users</span>
+ <div id="choose_user"></div>
+ </div>
+ <div class="col-md-6">
+ <span>@SR.Shared_Teams</span>
+ <div id="choose_team"></div>
+ </div>
+ </div>
+
+ <script type="text/javascript">
+ var repo = "@Model.RepositoryName";
+ var chooser_params = [];
+ chooser_params.push(
+ {
+ data: @Html.Raw(Model.Users.ToJson()),
+ controller: "Account",
+ container: "#choose_user",
+ add_label: "@SR.Shared_Add",
+ del_label: "@SR.Shared_Remove",
+ add_action: { url: "@Url.Action("ChooseUser", "Repository")", query: function (item) { return { name: repo, user: item, act: "add" }; } },
+ del_action: { url: "@Url.Action("ChooseUser", "Repository")", query: function (item) { return { name: repo, user: item, act: "del" }; } },
+ action_array: [
+ {
+ key: "AllowRead",
+ on_label: "@SR.Repository_ShortAllowRead",
+ off_label: "@SR.Repository_ShortNonAllowRead",
+ checked: { url: "@Url.Action("ChooseUser", "Repository")", query: function (item) { return { name: repo, user: item, act: "read", value: true }; } },
+ unchecked: { url: "@Url.Action("ChooseUser", "Repository")", query: function (item) { return { name: repo, user: item, act: "read", value: false }; } },
+ },
+ {
+ key: "AllowWrite",
+ on_label: "@SR.Repository_ShortAllowWrite",
+ off_label: "@SR.Repository_ShortNonAllowWrite",
+ checked: { url: "@Url.Action("ChooseUser", "Repository")", query: function (item) { return { name: repo, user: item, act: "write", value: true }; } },
+ unchecked: { url: "@Url.Action("ChooseUser", "Repository")", query: function (item) { return { name: repo, user: item, act: "write", value: false }; } },
+ },
+ {
+ key: "IsOwner",
+ on_label: "@SR.Repository_ShortIsOwner",
+ off_label: "@SR.Repository_ShortNotOwner",
+ checked: { url: "@Url.Action("ChooseUser", "Repository")", query: function (item) { return { name: repo, user: item, act: "owner", value: true }; } },
+ unchecked: { url: "@Url.Action("ChooseUser", "Repository")", query: function (item) { return { name: repo, user: item, act: "owner", value: false }; } },
+ },
+ ]
+ });
+
+ chooser_params.push(
+ {
+ data: @Html.Raw(Model.Teams.ToJson()),
+ controller: "Team",
+ container: "#choose_team",
+ add_label: "@SR.Shared_Add",
+ del_label: "@SR.Shared_Remove",
+ add_action: { url: "@Url.Action("ChooseTeam", "Repository")", query: function (item) { return { name: repo, team: item, act: "add" }; } },
+ del_action: { url: "@Url.Action("ChooseTeam", "Repository")", query: function (item) { return { name: repo, team: item, act: "del" }; } },
+ action_array: [
+ {
+ key: "AllowRead",
+ on_label: "@SR.Repository_ShortAllowRead",
+ off_label: "@SR.Repository_ShortNonAllowRead",
+ checked: { url: "@Url.Action("ChooseTeam", "Repository")", query: function (item) { return { name: repo, team: item, act: "read", value: true }; } },
+ unchecked: { url: "@Url.Action("ChooseTeam", "Repository")", query: function (item) { return { name: repo, team: item, act: "read", value: false }; } },
+ },
+ {
+ key: "AllowWrite",
+ on_label: "@SR.Repository_ShortAllowWrite",
+ off_label: "@SR.Repository_ShortNonAllowWrite",
+ checked: { url: "@Url.Action("ChooseTeam", "Repository")", query: function (item) { return { name: repo, team: item, act: "write", value: true }; } },
+ unchecked: { url: "@Url.Action("ChooseTeam", "Repository")", query: function (item) { return { name: repo, team: item, act: "write", value: false }; } },
+ },
+ ]
+ });
+ </script>
+}
+@Html.ActionLink(SR.Shared_Back, "Detail", new { Name = Model.RepositoryName }, new { @class = "btn btn-default" })
diff --git a/GitCandy.Web/Views/Repository/Coop.generated.cs b/GitCandy.Web/Views/Repository/Coop.generated.cs
new file mode 100644
index 0000000..1cc1d26
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/Coop.generated.cs
@@ -0,0 +1,461 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+
+ #line 2 "..\..\Views\Repository\Coop.cshtml"
+ using NewLife.Serialization;
+
+ #line default
+ #line hidden
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Repository/Coop.cshtml")]
+ public partial class _Views_Repository_Coop_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.CollaborationModel>
+ {
+ public _Views_Repository_Coop_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+WriteLiteral("\r\n");
+
+
+ #line 4 "..\..\Views\Repository\Coop.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Repository_CollaborationTitle, Model.RepositoryName));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<h4>");
+
+
+ #line 8 "..\..\Views\Repository\Coop.cshtml"
+Write(String.Format(SR.Repository_CollaborationTitle, Model.RepositoryName));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h4>\r\n\r\n");
+
+
+ #line 10 "..\..\Views\Repository\Coop.cshtml"
+ if (Model != null)
+{
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <div");
+
+WriteLiteral(" class=\"row\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"col-md-6\"");
+
+WriteLiteral(">\r\n <span>");
+
+
+ #line 14 "..\..\Views\Repository\Coop.cshtml"
+ Write(SR.Shared_Users);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span>\r\n <div");
+
+WriteLiteral(" id=\"choose_user\"");
+
+WriteLiteral("></div>\r\n </div>\r\n <div");
+
+WriteLiteral(" class=\"col-md-6\"");
+
+WriteLiteral(">\r\n <span>");
+
+
+ #line 18 "..\..\Views\Repository\Coop.cshtml"
+ Write(SR.Shared_Teams);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span>\r\n <div");
+
+WriteLiteral(" id=\"choose_team\"");
+
+WriteLiteral("></div>\r\n </div>\r\n </div>\r\n");
+
+
+ #line 22 "..\..\Views\Repository\Coop.cshtml"
+
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <script");
+
+WriteLiteral(" type=\"text/javascript\"");
+
+WriteLiteral(">\r\n var repo = \"");
+
+
+ #line 24 "..\..\Views\Repository\Coop.cshtml"
+ Write(Model.RepositoryName);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\";\r\n var chooser_params = [];\r\n chooser_params.push(\r\n {" +
+"\r\n data: ");
+
+
+ #line 28 "..\..\Views\Repository\Coop.cshtml"
+ Write(Html.Raw(Model.Users.ToJson()));
+
+
+ #line default
+ #line hidden
+WriteLiteral(",\r\n controller: \"Account\",\r\n container: \"#choose_us" +
+"er\",\r\n add_label: \"");
+
+
+ #line 31 "..\..\Views\Repository\Coop.cshtml"
+ Write(SR.Shared_Add);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\",\r\n del_label: \"");
+
+
+ #line 32 "..\..\Views\Repository\Coop.cshtml"
+ Write(SR.Shared_Remove);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\",\r\n add_action: { url: \"");
+
+
+ #line 33 "..\..\Views\Repository\Coop.cshtml"
+ Write(Url.Action("ChooseUser", "Repository"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\", query: function (item) { return { name: repo, user: item, act: \"add\" }; } },\r\n" +
+" del_action: { url: \"");
+
+
+ #line 34 "..\..\Views\Repository\Coop.cshtml"
+ Write(Url.Action("ChooseUser", "Repository"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\", query: function (item) { return { name: repo, user: item, act: \"del\" }; } },\r\n" +
+" action_array: [\r\n {\r\n " +
+"key: \"AllowRead\",\r\n on_label: \"");
+
+
+ #line 38 "..\..\Views\Repository\Coop.cshtml"
+ Write(SR.Repository_ShortAllowRead);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\",\r\n off_label: \"");
+
+
+ #line 39 "..\..\Views\Repository\Coop.cshtml"
+ Write(SR.Repository_ShortNonAllowRead);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\",\r\n checked: { url: \"");
+
+
+ #line 40 "..\..\Views\Repository\Coop.cshtml"
+ Write(Url.Action("ChooseUser", "Repository"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\", query: function (item) { return { name: repo, user: item, act: \"read\", value: " +
+"true }; } },\r\n unchecked: { url: \"");
+
+
+ #line 41 "..\..\Views\Repository\Coop.cshtml"
+ Write(Url.Action("ChooseUser", "Repository"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\", query: function (item) { return { name: repo, user: item, act: \"read\", value: " +
+"false }; } },\r\n },\r\n {\r\n " +
+" key: \"AllowWrite\",\r\n on_label: \"");
+
+
+ #line 45 "..\..\Views\Repository\Coop.cshtml"
+ Write(SR.Repository_ShortAllowWrite);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\",\r\n off_label: \"");
+
+
+ #line 46 "..\..\Views\Repository\Coop.cshtml"
+ Write(SR.Repository_ShortNonAllowWrite);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\",\r\n checked: { url: \"");
+
+
+ #line 47 "..\..\Views\Repository\Coop.cshtml"
+ Write(Url.Action("ChooseUser", "Repository"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\", query: function (item) { return { name: repo, user: item, act: \"write\", value:" +
+" true }; } },\r\n unchecked: { url: \"");
+
+
+ #line 48 "..\..\Views\Repository\Coop.cshtml"
+ Write(Url.Action("ChooseUser", "Repository"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\", query: function (item) { return { name: repo, user: item, act: \"write\", value:" +
+" false }; } },\r\n },\r\n {\r\n " +
+" key: \"IsOwner\",\r\n on_label: \"");
+
+
+ #line 52 "..\..\Views\Repository\Coop.cshtml"
+ Write(SR.Repository_ShortIsOwner);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\",\r\n off_label: \"");
+
+
+ #line 53 "..\..\Views\Repository\Coop.cshtml"
+ Write(SR.Repository_ShortNotOwner);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\",\r\n checked: { url: \"");
+
+
+ #line 54 "..\..\Views\Repository\Coop.cshtml"
+ Write(Url.Action("ChooseUser", "Repository"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\", query: function (item) { return { name: repo, user: item, act: \"owner\", value:" +
+" true }; } },\r\n unchecked: { url: \"");
+
+
+ #line 55 "..\..\Views\Repository\Coop.cshtml"
+ Write(Url.Action("ChooseUser", "Repository"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\", query: function (item) { return { name: repo, user: item, act: \"owner\", value:" +
+" false }; } },\r\n },\r\n ]\r\n });\r\n\r\n " +
+" chooser_params.push(\r\n {\r\n data: ");
+
+
+ #line 62 "..\..\Views\Repository\Coop.cshtml"
+ Write(Html.Raw(Model.Teams.ToJson()));
+
+
+ #line default
+ #line hidden
+WriteLiteral(",\r\n controller: \"Team\",\r\n container: \"#choose_team\"" +
+",\r\n add_label: \"");
+
+
+ #line 65 "..\..\Views\Repository\Coop.cshtml"
+ Write(SR.Shared_Add);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\",\r\n del_label: \"");
+
+
+ #line 66 "..\..\Views\Repository\Coop.cshtml"
+ Write(SR.Shared_Remove);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\",\r\n add_action: { url: \"");
+
+
+ #line 67 "..\..\Views\Repository\Coop.cshtml"
+ Write(Url.Action("ChooseTeam", "Repository"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\", query: function (item) { return { name: repo, team: item, act: \"add\" }; } },\r\n" +
+" del_action: { url: \"");
+
+
+ #line 68 "..\..\Views\Repository\Coop.cshtml"
+ Write(Url.Action("ChooseTeam", "Repository"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\", query: function (item) { return { name: repo, team: item, act: \"del\" }; } },\r\n" +
+" action_array: [\r\n {\r\n " +
+"key: \"AllowRead\",\r\n on_label: \"");
+
+
+ #line 72 "..\..\Views\Repository\Coop.cshtml"
+ Write(SR.Repository_ShortAllowRead);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\",\r\n off_label: \"");
+
+
+ #line 73 "..\..\Views\Repository\Coop.cshtml"
+ Write(SR.Repository_ShortNonAllowRead);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\",\r\n checked: { url: \"");
+
+
+ #line 74 "..\..\Views\Repository\Coop.cshtml"
+ Write(Url.Action("ChooseTeam", "Repository"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\", query: function (item) { return { name: repo, team: item, act: \"read\", value: " +
+"true }; } },\r\n unchecked: { url: \"");
+
+
+ #line 75 "..\..\Views\Repository\Coop.cshtml"
+ Write(Url.Action("ChooseTeam", "Repository"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\", query: function (item) { return { name: repo, team: item, act: \"read\", value: " +
+"false }; } },\r\n },\r\n {\r\n " +
+" key: \"AllowWrite\",\r\n on_label: \"");
+
+
+ #line 79 "..\..\Views\Repository\Coop.cshtml"
+ Write(SR.Repository_ShortAllowWrite);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\",\r\n off_label: \"");
+
+
+ #line 80 "..\..\Views\Repository\Coop.cshtml"
+ Write(SR.Repository_ShortNonAllowWrite);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\",\r\n checked: { url: \"");
+
+
+ #line 81 "..\..\Views\Repository\Coop.cshtml"
+ Write(Url.Action("ChooseTeam", "Repository"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\", query: function (item) { return { name: repo, team: item, act: \"write\", value:" +
+" true }; } },\r\n unchecked: { url: \"");
+
+
+ #line 82 "..\..\Views\Repository\Coop.cshtml"
+ Write(Url.Action("ChooseTeam", "Repository"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\", query: function (item) { return { name: repo, team: item, act: \"write\", value:" +
+" false }; } },\r\n },\r\n ]\r\n });\r\n " +
+"</script>\r\n");
+
+
+ #line 87 "..\..\Views\Repository\Coop.cshtml"
+}
+
+
+ #line default
+ #line hidden
+
+ #line 88 "..\..\Views\Repository\Coop.cshtml"
+Write(Html.ActionLink(SR.Shared_Back, "Detail", new { Name = Model.RepositoryName }, new { @class = "btn btn-default" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n");
+
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Repository/Create.cshtml b/GitCandy.Web/Views/Repository/Create.cshtml
new file mode 100644
index 0000000..b4e56b1
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/Create.cshtml
@@ -0,0 +1,60 @@
+@model GitCandy.Models.RepositoryModel
+
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, SR.Repository_CreateTitle);
+}
+
+<h3>@SR.Repository_CreateTitle</h3>
+
+
+@using (Html.BeginForm("Create", "Repository", FormMethod.Post))
+{
+ <dl class="dl-horizontal col-md-8">
+
+ <dt>@Html.DisplayNameFor(s => s.Name)</dt>
+ <dd>@Html.TextBoxFor(s => s.Name, new { @class = "form-control" })</dd>
+ <dd>
+ <span class="text-danger">
+ @Html.ValidationMessageFor(s => s.Name)
+ </span>
+ </dd>
+
+ <dt>@Html.DisplayNameFor(s => s.IsPrivate)</dt>
+ <dd>
+ <div class="switch" data-on-label="@SR.Shared_Yes" data-off-label="@SR.Shared_No">
+ @Html.CheckBoxFor(s => s.IsPrivate, new { data_size = "small" })
+ </div>
+ </dd>
+
+ <dt>@Html.DisplayNameFor(s => s.AllowAnonymousRead)</dt>
+ <dd>
+ <div class="switch" data-on-label="@SR.Shared_Yes" data-off-label="@SR.Shared_No">
+ @Html.CheckBoxFor(s => s.AllowAnonymousRead, new { data_size = "small" })
+ </div>
+ </dd>
+
+ <dt>@Html.DisplayNameFor(s => s.AllowAnonymousWrite)</dt>
+ <dd>
+ <div class="switch" data-on-label="@SR.Shared_Yes" data-off-label="@SR.Shared_No">
+ @Html.CheckBoxFor(s => s.AllowAnonymousWrite, new { data_size = "small" })
+ </div>
+ </dd>
+
+ <dt>@Html.DisplayNameFor(s => s.Description)</dt>
+ <dd>@Html.TextAreaFor(s => s.Description, 4, 0, new { @class = "form-control" })</dd>
+ <dd>
+ <span class="text-danger">
+ @Html.ValidationMessageFor(s => s.Description)
+ </span>
+ </dd>
+
+ <dt></dt>
+ <dd>@Html.ValidationSummary(true, SR.Repository_CreationUnsuccessfull, new { @class = "alert alert-dismissable alert-danger" })</dd>
+
+ <dt></dt>
+ <dd>
+ <button type="submit" class="btn btn-primary">@SR.Shared_Create</button>
+ <button type="reset" class="btn btn-inverse">@SR.Shared_Reset</button>
+ </dd>
+ </dl>
+}
diff --git a/GitCandy.Web/Views/Repository/Create.generated.cs b/GitCandy.Web/Views/Repository/Create.generated.cs
new file mode 100644
index 0000000..77d012f
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/Create.generated.cs
@@ -0,0 +1,338 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Repository/Create.cshtml")]
+ public partial class _Views_Repository_Create_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.RepositoryModel>
+ {
+ public _Views_Repository_Create_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 3 "..\..\Views\Repository\Create.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, SR.Repository_CreateTitle);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<h3>");
+
+
+ #line 7 "..\..\Views\Repository\Create.cshtml"
+Write(SR.Repository_CreateTitle);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h3>\r\n\r\n\r\n");
+
+
+ #line 10 "..\..\Views\Repository\Create.cshtml"
+ using (Html.BeginForm("Create", "Repository", FormMethod.Post))
+{
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <dl");
+
+WriteLiteral(" class=\"dl-horizontal col-md-8\"");
+
+WriteLiteral(">\r\n\r\n <dt>");
+
+
+ #line 14 "..\..\Views\Repository\Create.cshtml"
+ Write(Html.DisplayNameFor(s => s.Name));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 15 "..\..\Views\Repository\Create.cshtml"
+ Write(Html.TextBoxFor(s => s.Name, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n <dd>\r\n <span");
+
+WriteLiteral(" class=\"text-danger\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 18 "..\..\Views\Repository\Create.cshtml"
+ Write(Html.ValidationMessageFor(s => s.Name));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </span>\r\n </dd>\r\n\r\n <dt>");
+
+
+ #line 22 "..\..\Views\Repository\Create.cshtml"
+ Write(Html.DisplayNameFor(s => s.IsPrivate));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>\r\n <div");
+
+WriteLiteral(" class=\"switch\"");
+
+WriteLiteral(" data-on-label=\"");
+
+
+ #line 24 "..\..\Views\Repository\Create.cshtml"
+ Write(SR.Shared_Yes);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral(" data-off-label=\"");
+
+
+ #line 24 "..\..\Views\Repository\Create.cshtml"
+ Write(SR.Shared_No);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 25 "..\..\Views\Repository\Create.cshtml"
+ Write(Html.CheckBoxFor(s => s.IsPrivate, new { data_size = "small" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n </dd>\r\n\r\n <dt>");
+
+
+ #line 29 "..\..\Views\Repository\Create.cshtml"
+ Write(Html.DisplayNameFor(s => s.AllowAnonymousRead));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>\r\n <div");
+
+WriteLiteral(" class=\"switch\"");
+
+WriteLiteral(" data-on-label=\"");
+
+
+ #line 31 "..\..\Views\Repository\Create.cshtml"
+ Write(SR.Shared_Yes);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral(" data-off-label=\"");
+
+
+ #line 31 "..\..\Views\Repository\Create.cshtml"
+ Write(SR.Shared_No);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 32 "..\..\Views\Repository\Create.cshtml"
+ Write(Html.CheckBoxFor(s => s.AllowAnonymousRead, new { data_size = "small" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n </dd>\r\n\r\n <dt>");
+
+
+ #line 36 "..\..\Views\Repository\Create.cshtml"
+ Write(Html.DisplayNameFor(s => s.AllowAnonymousWrite));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>\r\n <div");
+
+WriteLiteral(" class=\"switch\"");
+
+WriteLiteral(" data-on-label=\"");
+
+
+ #line 38 "..\..\Views\Repository\Create.cshtml"
+ Write(SR.Shared_Yes);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral(" data-off-label=\"");
+
+
+ #line 38 "..\..\Views\Repository\Create.cshtml"
+ Write(SR.Shared_No);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 39 "..\..\Views\Repository\Create.cshtml"
+ Write(Html.CheckBoxFor(s => s.AllowAnonymousWrite, new { data_size = "small" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n </dd>\r\n\r\n <dt>");
+
+
+ #line 43 "..\..\Views\Repository\Create.cshtml"
+ Write(Html.DisplayNameFor(s => s.Description));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 44 "..\..\Views\Repository\Create.cshtml"
+ Write(Html.TextAreaFor(s => s.Description, 4, 0, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n <dd>\r\n <span");
+
+WriteLiteral(" class=\"text-danger\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 47 "..\..\Views\Repository\Create.cshtml"
+ Write(Html.ValidationMessageFor(s => s.Description));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </span>\r\n </dd>\r\n\r\n <dt></dt>\r\n <dd>");
+
+
+ #line 52 "..\..\Views\Repository\Create.cshtml"
+ Write(Html.ValidationSummary(true, SR.Repository_CreationUnsuccessfull, new { @class = "alert alert-dismissable alert-danger" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt></dt>\r\n <dd>\r\n <button");
+
+WriteLiteral(" type=\"submit\"");
+
+WriteLiteral(" class=\"btn btn-primary\"");
+
+WriteLiteral(">");
+
+
+ #line 56 "..\..\Views\Repository\Create.cshtml"
+ Write(SR.Shared_Create);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</button> \r\n <button");
+
+WriteLiteral(" type=\"reset\"");
+
+WriteLiteral(" class=\"btn btn-inverse\"");
+
+WriteLiteral(">");
+
+
+ #line 57 "..\..\Views\Repository\Create.cshtml"
+ Write(SR.Shared_Reset);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</button> \r\n </dd>\r\n </dl>\r\n");
+
+
+ #line 60 "..\..\Views\Repository\Create.cshtml"
+}
+
+
+ #line default
+ #line hidden
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Repository/Delete.cshtml b/GitCandy.Web/Views/Repository/Delete.cshtml
new file mode 100644
index 0000000..f9fc980
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/Delete.cshtml
@@ -0,0 +1,23 @@
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Repository_DeleteTitle, Model));
+}
+
+<div class="panel panel-danger">
+ <div class="panel-heading">
+ <h4 class="panel-title">@SR.Shared_Conform</h4>
+ </div>
+ <div class="panel-body">
+ @String.Format(SR.Repository_DeletionWords, Model)
+ </div>
+</div>
+
+@Html.ValidationSummary(true, "", new { @class = "alert alert-error" })
+
+<div>
+ <div class="pull-left">
+ @Html.ActionLink(SR.Shared_Back, "Detail", "Repository", new { name = Model }, new { @class = "btn btn-default" })
+ </div>
+ <div class="pull-right">
+ @Html.ActionLink(SR.Shared_Delete, "Delete", "Repository", new { name = Model, Conform = "Yes" }, new { @class = "btn btn-danger" })
+ </div>
+</div>
diff --git a/GitCandy.Web/Views/Repository/Delete.generated.cs b/GitCandy.Web/Views/Repository/Delete.generated.cs
new file mode 100644
index 0000000..7d8d14b
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/Delete.generated.cs
@@ -0,0 +1,140 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Repository/Delete.cshtml")]
+ public partial class _Views_Repository_Delete_cshtml : System.Web.Mvc.WebViewPage<dynamic>
+ {
+ public _Views_Repository_Delete_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 1 "..\..\Views\Repository\Delete.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Repository_DeleteTitle, Model));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<div");
+
+WriteLiteral(" class=\"panel panel-danger\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"panel-heading\"");
+
+WriteLiteral(">\r\n <h4");
+
+WriteLiteral(" class=\"panel-title\"");
+
+WriteLiteral(">");
+
+
+ #line 7 "..\..\Views\Repository\Delete.cshtml"
+ Write(SR.Shared_Conform);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h4>\r\n </div>\r\n <div");
+
+WriteLiteral(" class=\"panel-body\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 10 "..\..\Views\Repository\Delete.cshtml"
+ Write(String.Format(SR.Repository_DeletionWords, Model));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n</div>\r\n\r\n");
+
+
+ #line 14 "..\..\Views\Repository\Delete.cshtml"
+Write(Html.ValidationSummary(true, "", new { @class = "alert alert-error" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<div>\r\n <div");
+
+WriteLiteral(" class=\"pull-left\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 18 "..\..\Views\Repository\Delete.cshtml"
+ Write(Html.ActionLink(SR.Shared_Back, "Detail", "Repository", new { name = Model }, new { @class = "btn btn-default" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n <div");
+
+WriteLiteral(" class=\"pull-right\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 21 "..\..\Views\Repository\Delete.cshtml"
+ Write(Html.ActionLink(SR.Shared_Delete, "Delete", "Repository", new { name = Model, Conform = "Yes" }, new { @class = "btn btn-danger" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n</div>\r\n");
+
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Repository/Detail.cshtml b/GitCandy.Web/Views/Repository/Detail.cshtml
new file mode 100644
index 0000000..7add869
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/Detail.cshtml
@@ -0,0 +1,50 @@
+@model GitCandy.Models.RepositoryModel
+
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Repository_DetailTitle, Model.Name));
+ var token = GitCandy.Security.Token.Current;
+}
+
+<h3>@String.Format(SR.Repository_DetailTitle, Model.Name)</h3>
+
+@if (Model != null)
+{
+ <dl class="dl-horizontal">
+
+ <dt>@Html.DisplayNameFor(s => s.Name)</dt>
+ <dd>@Model.Name</dd>
+
+ <dt>@Html.DisplayNameFor(s => s.IsPrivate)</dt>
+ <dd>@Html.DisplayFor(s => s.IsPrivate)</dd>
+
+ <dt>@Html.DisplayNameFor(s => s.AllowAnonymousRead)</dt>
+ <dd>@Html.DisplayFor(s => s.AllowAnonymousRead)</dd>
+
+ <dt>@Html.DisplayNameFor(s => s.AllowAnonymousWrite)</dt>
+ <dd>@Html.DisplayFor(s => s.AllowAnonymousWrite)</dd>
+
+ <dt>@Html.DisplayNameFor(s => s.DefaultBranch)</dt>
+ <dd>@Model.DefaultBranch</dd>
+
+ <dt>@Html.DisplayNameFor(s => s.Description)</dt>
+ <dd>@Model.Description</dd>
+
+ <dt>@Html.DisplayNameFor(s => s.Collaborators)</dt>
+ <dd>@Html.DisplayFor(s => s.Collaborators)</dd>
+
+ <dt>@Html.DisplayNameFor(s => s.Teams)</dt>
+ <dd>@Html.DisplayFor(s => s.Teams)</dd>
+
+ <dt>
+ @Html.ActionLink(SR.Repository_Tree, "Tree", new { Model.Name }, new { @class = "btn btn-default pull-left" })
+ </dt>
+ <dd>
+ @if (token != null && (Model.CurrentUserIsOwner || token.IsSystemAdministrator))
+ {
+ @Html.ActionLink(SR.Shared_Edit, "Edit", new { Model.Name }, new { @class = "btn btn-primary" })
+ @:
+ @Html.ActionLink(SR.Repository_Relationship, "Coop", new { Model.Name }, new { @class = "btn btn-info" })
+ }
+ </dd>
+ </dl>
+}
diff --git a/GitCandy.Web/Views/Repository/Detail.generated.cs b/GitCandy.Web/Views/Repository/Detail.generated.cs
new file mode 100644
index 0000000..f606fbf
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/Detail.generated.cs
@@ -0,0 +1,306 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Repository/Detail.cshtml")]
+ public partial class _Views_Repository_Detail_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.RepositoryModel>
+ {
+ public _Views_Repository_Detail_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 3 "..\..\Views\Repository\Detail.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Repository_DetailTitle, Model.Name));
+ var token = GitCandy.Security.Token.Current;
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<h3>");
+
+
+ #line 8 "..\..\Views\Repository\Detail.cshtml"
+Write(String.Format(SR.Repository_DetailTitle, Model.Name));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h3>\r\n\r\n");
+
+
+ #line 10 "..\..\Views\Repository\Detail.cshtml"
+ if (Model != null)
+{
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <dl");
+
+WriteLiteral(" class=\"dl-horizontal\"");
+
+WriteLiteral(">\r\n\r\n <dt>");
+
+
+ #line 14 "..\..\Views\Repository\Detail.cshtml"
+ Write(Html.DisplayNameFor(s => s.Name));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 15 "..\..\Views\Repository\Detail.cshtml"
+ Write(Model.Name);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt>");
+
+
+ #line 17 "..\..\Views\Repository\Detail.cshtml"
+ Write(Html.DisplayNameFor(s => s.IsPrivate));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 18 "..\..\Views\Repository\Detail.cshtml"
+ Write(Html.DisplayFor(s => s.IsPrivate));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt>");
+
+
+ #line 20 "..\..\Views\Repository\Detail.cshtml"
+ Write(Html.DisplayNameFor(s => s.AllowAnonymousRead));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 21 "..\..\Views\Repository\Detail.cshtml"
+ Write(Html.DisplayFor(s => s.AllowAnonymousRead));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt>");
+
+
+ #line 23 "..\..\Views\Repository\Detail.cshtml"
+ Write(Html.DisplayNameFor(s => s.AllowAnonymousWrite));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 24 "..\..\Views\Repository\Detail.cshtml"
+ Write(Html.DisplayFor(s => s.AllowAnonymousWrite));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt>");
+
+
+ #line 26 "..\..\Views\Repository\Detail.cshtml"
+ Write(Html.DisplayNameFor(s => s.DefaultBranch));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 27 "..\..\Views\Repository\Detail.cshtml"
+ Write(Model.DefaultBranch);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt>");
+
+
+ #line 29 "..\..\Views\Repository\Detail.cshtml"
+ Write(Html.DisplayNameFor(s => s.Description));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 30 "..\..\Views\Repository\Detail.cshtml"
+ Write(Model.Description);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt>");
+
+
+ #line 32 "..\..\Views\Repository\Detail.cshtml"
+ Write(Html.DisplayNameFor(s => s.Collaborators));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 33 "..\..\Views\Repository\Detail.cshtml"
+ Write(Html.DisplayFor(s => s.Collaborators));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt>");
+
+
+ #line 35 "..\..\Views\Repository\Detail.cshtml"
+ Write(Html.DisplayNameFor(s => s.Teams));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 36 "..\..\Views\Repository\Detail.cshtml"
+ Write(Html.DisplayFor(s => s.Teams));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt>\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 39 "..\..\Views\Repository\Detail.cshtml"
+ Write(Html.ActionLink(SR.Repository_Tree, "Tree", new { Model.Name }, new { @class = "btn btn-default pull-left" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </dt>\r\n <dd>\r\n");
+
+
+ #line 42 "..\..\Views\Repository\Detail.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 42 "..\..\Views\Repository\Detail.cshtml"
+ if (token != null && (Model.CurrentUserIsOwner || token.IsSystemAdministrator))
+ {
+
+
+ #line default
+ #line hidden
+
+ #line 44 "..\..\Views\Repository\Detail.cshtml"
+ Write(Html.ActionLink(SR.Shared_Edit, "Edit", new { Model.Name }, new { @class = "btn btn-primary" }));
+
+
+ #line default
+ #line hidden
+
+ #line 44 "..\..\Views\Repository\Detail.cshtml"
+
+
+
+ #line default
+ #line hidden
+WriteLiteral(" ");
+
+WriteLiteral("\r\n");
+
+
+ #line 46 "..\..\Views\Repository\Detail.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 46 "..\..\Views\Repository\Detail.cshtml"
+ Write(Html.ActionLink(SR.Repository_Relationship, "Coop", new { Model.Name }, new { @class = "btn btn-info" }));
+
+
+ #line default
+ #line hidden
+
+ #line 46 "..\..\Views\Repository\Detail.cshtml"
+
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" </dd>\r\n </dl>\r\n");
+
+
+ #line 50 "..\..\Views\Repository\Detail.cshtml"
+}
+
+
+ #line default
+ #line hidden
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Repository/Edit.cshtml b/GitCandy.Web/Views/Repository/Edit.cshtml
new file mode 100644
index 0000000..11992b4
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/Edit.cshtml
@@ -0,0 +1,67 @@
+@model GitCandy.Models.RepositoryModel
+
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Repository_EditTitle, Model.Name));
+ var token = GitCandy.Security.Token.Current;
+}
+
+<h3>@String.Format(SR.Repository_EditTitle, Model.Name)</h3>
+
+
+@using (Html.BeginForm("Edit", "Repository", FormMethod.Post))
+{
+ <dl class="dl-horizontal col-md-8">
+ <dt>@Html.DisplayNameFor(s => s.Name)</dt>
+ <dd>
+ @Html.HiddenFor(s => s.Name)
+ @Model.Name
+ </dd>
+
+ <dt>@Html.DisplayNameFor(s => s.IsPrivate)</dt>
+ <dd>
+ <div class="switch" data-on-label="@SR.Shared_Yes" data-off-label="@SR.Shared_No">
+ @Html.CheckBoxFor(s => s.IsPrivate, new { data_size = "small" })
+ </div>
+ </dd>
+
+ <dt>@Html.DisplayNameFor(s => s.AllowAnonymousRead)</dt>
+ <dd>
+ <div class="switch" data-on-label="@SR.Shared_Yes" data-off-label="@SR.Shared_No">
+ @Html.CheckBoxFor(s => s.AllowAnonymousRead, new { data_size = "small" })
+ </div>
+ </dd>
+
+ <dt>@Html.DisplayNameFor(s => s.AllowAnonymousWrite)</dt>
+ <dd>
+ <div class="switch" data-on-label="@SR.Shared_Yes" data-off-label="@SR.Shared_No">
+ @Html.CheckBoxFor(s => s.AllowAnonymousWrite, new { data_size = "small" })
+ </div>
+ </dd>
+
+ <dt>@Html.DisplayNameFor(s => s.DefaultBranch)</dt>
+ <dd>@Html.DropDownListFor(s => s.DefaultBranch, Model.LocalBranches.ToSelectListItem(Model.DefaultBranch), new { @class = "form-control" })</dd>
+
+ <dt>@Html.DisplayNameFor(s => s.Description)</dt>
+ <dd>@Html.TextAreaFor(s => s.Description, 4, 0, new { @class = "form-control" })</dd>
+ <dd>
+ <span class="text-danger">
+ @Html.ValidationMessageFor(s => s.Description)
+ </span>
+ </dd>
+
+ <dt></dt>
+ <dd>@Html.ValidationSummary(true, SR.Repository_UpdateUnsuccessfull, new { @class = "alert alert-dismissable alert-danger" })</dd>
+
+ <dt>
+ @Html.ActionLink(SR.Shared_Back, "Detail", new { Model.Name }, new { @class = "btn btn-default pull-left" })
+ </dt>
+ <dd>
+ <button type="submit" class="btn btn-primary">@SR.Shared_Save</button>
+ <button type="reset" class="btn btn-inverse">@SR.Shared_Reset</button>
+ @if (token != null && (Model.CurrentUserIsOwner || token.IsSystemAdministrator))
+ {
+ @Html.ActionLink(SR.Shared_Delete, "Delete", new { Model.Name }, new { @class = "btn btn-danger" })
+ }
+ </dd>
+ </dl>
+}
diff --git a/GitCandy.Web/Views/Repository/Edit.generated.cs b/GitCandy.Web/Views/Repository/Edit.generated.cs
new file mode 100644
index 0000000..29fe034
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/Edit.generated.cs
@@ -0,0 +1,397 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Repository/Edit.cshtml")]
+ public partial class _Views_Repository_Edit_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.RepositoryModel>
+ {
+ public _Views_Repository_Edit_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 3 "..\..\Views\Repository\Edit.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Repository_EditTitle, Model.Name));
+ var token = GitCandy.Security.Token.Current;
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<h3>");
+
+
+ #line 8 "..\..\Views\Repository\Edit.cshtml"
+Write(String.Format(SR.Repository_EditTitle, Model.Name));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h3>\r\n\r\n\r\n");
+
+
+ #line 11 "..\..\Views\Repository\Edit.cshtml"
+ using (Html.BeginForm("Edit", "Repository", FormMethod.Post))
+{
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <dl");
+
+WriteLiteral(" class=\"dl-horizontal col-md-8\"");
+
+WriteLiteral(">\r\n <dt>");
+
+
+ #line 14 "..\..\Views\Repository\Edit.cshtml"
+ Write(Html.DisplayNameFor(s => s.Name));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 16 "..\..\Views\Repository\Edit.cshtml"
+ Write(Html.HiddenFor(s => s.Name));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 17 "..\..\Views\Repository\Edit.cshtml"
+ Write(Model.Name);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </dd>\r\n\r\n <dt>");
+
+
+ #line 20 "..\..\Views\Repository\Edit.cshtml"
+ Write(Html.DisplayNameFor(s => s.IsPrivate));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>\r\n <div");
+
+WriteLiteral(" class=\"switch\"");
+
+WriteLiteral(" data-on-label=\"");
+
+
+ #line 22 "..\..\Views\Repository\Edit.cshtml"
+ Write(SR.Shared_Yes);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral(" data-off-label=\"");
+
+
+ #line 22 "..\..\Views\Repository\Edit.cshtml"
+ Write(SR.Shared_No);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 23 "..\..\Views\Repository\Edit.cshtml"
+ Write(Html.CheckBoxFor(s => s.IsPrivate, new { data_size = "small" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n </dd>\r\n\r\n <dt>");
+
+
+ #line 27 "..\..\Views\Repository\Edit.cshtml"
+ Write(Html.DisplayNameFor(s => s.AllowAnonymousRead));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>\r\n <div");
+
+WriteLiteral(" class=\"switch\"");
+
+WriteLiteral(" data-on-label=\"");
+
+
+ #line 29 "..\..\Views\Repository\Edit.cshtml"
+ Write(SR.Shared_Yes);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral(" data-off-label=\"");
+
+
+ #line 29 "..\..\Views\Repository\Edit.cshtml"
+ Write(SR.Shared_No);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 30 "..\..\Views\Repository\Edit.cshtml"
+ Write(Html.CheckBoxFor(s => s.AllowAnonymousRead, new { data_size = "small" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n </dd>\r\n\r\n <dt>");
+
+
+ #line 34 "..\..\Views\Repository\Edit.cshtml"
+ Write(Html.DisplayNameFor(s => s.AllowAnonymousWrite));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>\r\n <div");
+
+WriteLiteral(" class=\"switch\"");
+
+WriteLiteral(" data-on-label=\"");
+
+
+ #line 36 "..\..\Views\Repository\Edit.cshtml"
+ Write(SR.Shared_Yes);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral(" data-off-label=\"");
+
+
+ #line 36 "..\..\Views\Repository\Edit.cshtml"
+ Write(SR.Shared_No);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 37 "..\..\Views\Repository\Edit.cshtml"
+ Write(Html.CheckBoxFor(s => s.AllowAnonymousWrite, new { data_size = "small" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n </dd>\r\n\r\n <dt>");
+
+
+ #line 41 "..\..\Views\Repository\Edit.cshtml"
+ Write(Html.DisplayNameFor(s => s.DefaultBranch));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 42 "..\..\Views\Repository\Edit.cshtml"
+ Write(Html.DropDownListFor(s => s.DefaultBranch, Model.LocalBranches.ToSelectListItem(Model.DefaultBranch), new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt>");
+
+
+ #line 44 "..\..\Views\Repository\Edit.cshtml"
+ Write(Html.DisplayNameFor(s => s.Description));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 45 "..\..\Views\Repository\Edit.cshtml"
+ Write(Html.TextAreaFor(s => s.Description, 4, 0, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n <dd>\r\n <span");
+
+WriteLiteral(" class=\"text-danger\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 48 "..\..\Views\Repository\Edit.cshtml"
+ Write(Html.ValidationMessageFor(s => s.Description));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </span>\r\n </dd>\r\n\r\n <dt></dt>\r\n <dd>");
+
+
+ #line 53 "..\..\Views\Repository\Edit.cshtml"
+ Write(Html.ValidationSummary(true, SR.Repository_UpdateUnsuccessfull, new { @class = "alert alert-dismissable alert-danger" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt>\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 56 "..\..\Views\Repository\Edit.cshtml"
+ Write(Html.ActionLink(SR.Shared_Back, "Detail", new { Model.Name }, new { @class = "btn btn-default pull-left" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </dt>\r\n <dd>\r\n <button");
+
+WriteLiteral(" type=\"submit\"");
+
+WriteLiteral(" class=\"btn btn-primary\"");
+
+WriteLiteral(">");
+
+
+ #line 59 "..\..\Views\Repository\Edit.cshtml"
+ Write(SR.Shared_Save);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</button> \r\n <button");
+
+WriteLiteral(" type=\"reset\"");
+
+WriteLiteral(" class=\"btn btn-inverse\"");
+
+WriteLiteral(">");
+
+
+ #line 60 "..\..\Views\Repository\Edit.cshtml"
+ Write(SR.Shared_Reset);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</button> \r\n");
+
+
+ #line 61 "..\..\Views\Repository\Edit.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 61 "..\..\Views\Repository\Edit.cshtml"
+ if (token != null && (Model.CurrentUserIsOwner || token.IsSystemAdministrator))
+ {
+
+
+ #line default
+ #line hidden
+
+ #line 63 "..\..\Views\Repository\Edit.cshtml"
+ Write(Html.ActionLink(SR.Shared_Delete, "Delete", new { Model.Name }, new { @class = "btn btn-danger" }));
+
+
+ #line default
+ #line hidden
+
+ #line 63 "..\..\Views\Repository\Edit.cshtml"
+
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" </dd>\r\n </dl>\r\n");
+
+
+ #line 67 "..\..\Views\Repository\Edit.cshtml"
+}
+
+
+ #line default
+ #line hidden
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Repository/Index.cshtml b/GitCandy.Web/Views/Repository/Index.cshtml
new file mode 100644
index 0000000..11ee7f7
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/Index.cshtml
@@ -0,0 +1,47 @@
+@model GitCandy.Models.RepositoryListModel
+
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, SR.Repository_ListTitle);
+}
+
+<h4>@SR.Repository_ListTitle</h4>
+
+<div class="row">
+ @if (Model.CanCreateRepository)
+ {
+ <div class="pull-right">@Html.ActionLink(SR.Shared_Create, "Create", null, new { @class = "btn btn-primary" })</div>
+ }
+</div>
+<div class="row">
+ <div class="col-md-6">
+ <table class="table border-area">
+ <thead>@SR.Repository_Collaborations</thead>
+ @foreach (var repo in Model.Collaborations)
+ {
+ <tr>
+ <td>
+ <div>@Html.ActionLink(repo.Name, "Tree", Html.OverRoute(new { repo.Name }))</div>
+ <div>@repo.Description</div>
+ <div>@repo.Commits 提交,@repo.Branches 分支,@repo.Contributors 参与,@repo.Views 浏览,@repo.LastCommit.ToFullString() 最后提交</div>
+ </td>
+ </tr>
+ }
+ </table>
+ </div>
+
+ <div class="col-md-6">
+ <table class="table border-area">
+ <thead>@SR.Repository_PopularRepositories</thead>
+ @foreach (var repo in Model.Repositories)
+ {
+ <tr>
+ <td>
+ <div>@Html.ActionLink(repo.Name, "Tree", Html.OverRoute(new { repo.Name }))</div>
+ <div>@repo.Description</div>
+ <div>@repo.Commits 提交,@repo.Branches 分支,@repo.Contributors 参与,@repo.Views 浏览,@repo.LastCommit.ToFullString() 最后提交</div>
+ </td>
+ </tr>
+ }
+ </table>
+ </div>
+</div>
diff --git a/GitCandy.Web/Views/Repository/Index.generated.cs b/GitCandy.Web/Views/Repository/Index.generated.cs
new file mode 100644
index 0000000..51ac1b2
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/Index.generated.cs
@@ -0,0 +1,330 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Repository/Index.cshtml")]
+ public partial class _Views_Repository_Index_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.RepositoryListModel>
+ {
+ public _Views_Repository_Index_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 3 "..\..\Views\Repository\Index.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, SR.Repository_ListTitle);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<h4>");
+
+
+ #line 7 "..\..\Views\Repository\Index.cshtml"
+Write(SR.Repository_ListTitle);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h4>\r\n\r\n<div");
+
+WriteLiteral(" class=\"row\"");
+
+WriteLiteral(">\r\n");
+
+
+ #line 10 "..\..\Views\Repository\Index.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 10 "..\..\Views\Repository\Index.cshtml"
+ if (Model.CanCreateRepository)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <div");
+
+WriteLiteral(" class=\"pull-right\"");
+
+WriteLiteral(">");
+
+
+ #line 12 "..\..\Views\Repository\Index.cshtml"
+ Write(Html.ActionLink(SR.Shared_Create, "Create", null, new { @class = "btn btn-primary" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n");
+
+
+ #line 13 "..\..\Views\Repository\Index.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n<div");
+
+WriteLiteral(" class=\"row\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"col-md-6\"");
+
+WriteLiteral(">\r\n <table");
+
+WriteLiteral(" class=\"table border-area\"");
+
+WriteLiteral(">\r\n <thead>");
+
+
+ #line 18 "..\..\Views\Repository\Index.cshtml"
+ Write(SR.Repository_Collaborations);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</thead>\r\n");
+
+
+ #line 19 "..\..\Views\Repository\Index.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 19 "..\..\Views\Repository\Index.cshtml"
+ foreach (var repo in Model.Collaborations)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <tr>\r\n <td>\r\n <div>");
+
+
+ #line 23 "..\..\Views\Repository\Index.cshtml"
+ Write(Html.ActionLink(repo.Name, "Tree", Html.OverRoute(new { repo.Name })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n <div>");
+
+
+ #line 24 "..\..\Views\Repository\Index.cshtml"
+ Write(repo.Description);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n <div>");
+
+
+ #line 25 "..\..\Views\Repository\Index.cshtml"
+ Write(repo.Commits);
+
+
+ #line default
+ #line hidden
+WriteLiteral(" 提交,");
+
+
+ #line 25 "..\..\Views\Repository\Index.cshtml"
+ Write(repo.Branches);
+
+
+ #line default
+ #line hidden
+WriteLiteral(" 分支,");
+
+
+ #line 25 "..\..\Views\Repository\Index.cshtml"
+ Write(repo.Contributors);
+
+
+ #line default
+ #line hidden
+WriteLiteral(" 参与,");
+
+
+ #line 25 "..\..\Views\Repository\Index.cshtml"
+ Write(repo.Views);
+
+
+ #line default
+ #line hidden
+WriteLiteral(" 浏览,");
+
+
+ #line 25 "..\..\Views\Repository\Index.cshtml"
+ Write(repo.LastCommit.ToFullString());
+
+
+ #line default
+ #line hidden
+WriteLiteral(" 最后提交</div>\r\n </td>\r\n </tr>\r\n");
+
+
+ #line 28 "..\..\Views\Repository\Index.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" </table>\r\n </div>\r\n\r\n <div");
+
+WriteLiteral(" class=\"col-md-6\"");
+
+WriteLiteral(">\r\n <table");
+
+WriteLiteral(" class=\"table border-area\"");
+
+WriteLiteral(">\r\n <thead>");
+
+
+ #line 34 "..\..\Views\Repository\Index.cshtml"
+ Write(SR.Repository_PopularRepositories);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</thead>\r\n");
+
+
+ #line 35 "..\..\Views\Repository\Index.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 35 "..\..\Views\Repository\Index.cshtml"
+ foreach (var repo in Model.Repositories)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <tr>\r\n <td>\r\n <div>");
+
+
+ #line 39 "..\..\Views\Repository\Index.cshtml"
+ Write(Html.ActionLink(repo.Name, "Tree", Html.OverRoute(new { repo.Name })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n <div>");
+
+
+ #line 40 "..\..\Views\Repository\Index.cshtml"
+ Write(repo.Description);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n <div>");
+
+
+ #line 41 "..\..\Views\Repository\Index.cshtml"
+ Write(repo.Commits);
+
+
+ #line default
+ #line hidden
+WriteLiteral(" 提交,");
+
+
+ #line 41 "..\..\Views\Repository\Index.cshtml"
+ Write(repo.Branches);
+
+
+ #line default
+ #line hidden
+WriteLiteral(" 分支,");
+
+
+ #line 41 "..\..\Views\Repository\Index.cshtml"
+ Write(repo.Contributors);
+
+
+ #line default
+ #line hidden
+WriteLiteral(" 参与,");
+
+
+ #line 41 "..\..\Views\Repository\Index.cshtml"
+ Write(repo.Views);
+
+
+ #line default
+ #line hidden
+WriteLiteral(" 浏览,");
+
+
+ #line 41 "..\..\Views\Repository\Index.cshtml"
+ Write(repo.LastCommit.ToFullString());
+
+
+ #line default
+ #line hidden
+WriteLiteral(" 最后提交</div>\r\n </td>\r\n </tr>\r\n");
+
+
+ #line 44 "..\..\Views\Repository\Index.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" </table>\r\n </div>\r\n</div>\r\n");
+
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Repository/Tags.cshtml b/GitCandy.Web/Views/Repository/Tags.cshtml
new file mode 100644
index 0000000..d5a93a0
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/Tags.cshtml
@@ -0,0 +1,38 @@
+@model GitCandy.Models.TagsModel
+
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Repository_TagsTitle, Model.RepositoryName));
+}
+
+<h4>@String.Format(SR.Repository_TagsTitle, "") @Html.ActionLink(Model.RepositoryName, "Tree", Html.OverRoute(new { path = "" }))</h4>
+
+<div class="col-md-6">
+ @if (Model.HasTags)
+ {
+ foreach (var tag in Model.Tags)
+ {
+ <div class="row border-area">
+ <div class="pull-right">
+ @Html.Partial("_ZipButton", tag.ReferenceName)
+ @if (Model.CanDelete)
+ { <a class="btn btn-default" data-tag="@tag.ReferenceName" href="#">@SR.Shared_Delete</a>}
+ </div>
+ <div>@Html.ActionLink(tag.ReferenceName, "Tree", Html.OverRoute(new { path = tag.ReferenceName ?? tag.Sha }))</div>
+ <div title="@tag.When">@tag.When.LocalDateTime.ToFullString()</div>
+ <div>@tag.MessageShort</div>
+ <div>@Html.ActionLink(tag.Sha, "Commit", Html.OverRoute(new { path = tag.ReferenceName ?? tag.Sha }))</div>
+ </div>
+ }
+ }
+ else
+ {
+ <div>@SR.Repository_NoTags</div>
+ }
+</div>
+
+<script type="text/javascript">
+ var deleteTag_params = {
+ words: '@Html.Raw(SR.Repository_TagDeletionWords)',
+ url: '@Url.Action("Tags", "Repository")'
+ };
+</script>
diff --git a/GitCandy.Web/Views/Repository/Tags.generated.cs b/GitCandy.Web/Views/Repository/Tags.generated.cs
new file mode 100644
index 0000000..6753239
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/Tags.generated.cs
@@ -0,0 +1,274 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Repository/Tags.cshtml")]
+ public partial class _Views_Repository_Tags_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.TagsModel>
+ {
+ public _Views_Repository_Tags_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 3 "..\..\Views\Repository\Tags.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Repository_TagsTitle, Model.RepositoryName));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<h4>");
+
+
+ #line 7 "..\..\Views\Repository\Tags.cshtml"
+Write(String.Format(SR.Repository_TagsTitle, ""));
+
+
+ #line default
+ #line hidden
+WriteLiteral(" ");
+
+
+ #line 7 "..\..\Views\Repository\Tags.cshtml"
+ Write(Html.ActionLink(Model.RepositoryName, "Tree", Html.OverRoute(new { path = "" })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h4>\r\n\r\n<div");
+
+WriteLiteral(" class=\"col-md-6\"");
+
+WriteLiteral(">\r\n");
+
+
+ #line 10 "..\..\Views\Repository\Tags.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 10 "..\..\Views\Repository\Tags.cshtml"
+ if (Model.HasTags)
+ {
+ foreach (var tag in Model.Tags)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <div");
+
+WriteLiteral(" class=\"row border-area\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"pull-right\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 16 "..\..\Views\Repository\Tags.cshtml"
+ Write(Html.Partial("_ZipButton", tag.ReferenceName));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n");
+
+
+ #line 17 "..\..\Views\Repository\Tags.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 17 "..\..\Views\Repository\Tags.cshtml"
+ if (Model.CanDelete)
+ {
+
+ #line default
+ #line hidden
+WriteLiteral(" <a");
+
+WriteLiteral(" class=\"btn btn-default\"");
+
+WriteLiteral(" data-tag=\"");
+
+
+ #line 18 "..\..\Views\Repository\Tags.cshtml"
+ Write(tag.ReferenceName);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral(" href=\"#\"");
+
+WriteLiteral(">");
+
+
+ #line 18 "..\..\Views\Repository\Tags.cshtml"
+ Write(SR.Shared_Delete);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</a>");
+
+
+ #line 18 "..\..\Views\Repository\Tags.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" </div>\r\n <div>");
+
+
+ #line 20 "..\..\Views\Repository\Tags.cshtml"
+ Write(Html.ActionLink(tag.ReferenceName, "Tree", Html.OverRoute(new { path = tag.ReferenceName ?? tag.Sha })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n <div");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 897), Tuple.Create("\"", 914)
+
+ #line 21 "..\..\Views\Repository\Tags.cshtml"
+, Tuple.Create(Tuple.Create("", 905), Tuple.Create<System.Object, System.Int32>(tag.When
+
+ #line default
+ #line hidden
+, 905), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 21 "..\..\Views\Repository\Tags.cshtml"
+ Write(tag.When.LocalDateTime.ToFullString());
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n <div>");
+
+
+ #line 22 "..\..\Views\Repository\Tags.cshtml"
+ Write(tag.MessageShort);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n <div>");
+
+
+ #line 23 "..\..\Views\Repository\Tags.cshtml"
+ Write(Html.ActionLink(tag.Sha, "Commit", Html.OverRoute(new { path = tag.ReferenceName ?? tag.Sha })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n </div>\r\n");
+
+
+ #line 25 "..\..\Views\Repository\Tags.cshtml"
+ }
+ }
+ else
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <div>");
+
+
+ #line 29 "..\..\Views\Repository\Tags.cshtml"
+ Write(SR.Repository_NoTags);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n");
+
+
+ #line 30 "..\..\Views\Repository\Tags.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n\r\n<script");
+
+WriteLiteral(" type=\"text/javascript\"");
+
+WriteLiteral(">\r\n var deleteTag_params = {\r\n words: \'");
+
+
+ #line 35 "..\..\Views\Repository\Tags.cshtml"
+ Write(Html.Raw(SR.Repository_TagDeletionWords));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\',\r\n url: \'");
+
+
+ #line 36 "..\..\Views\Repository\Tags.cshtml"
+ Write(Url.Action("Tags", "Repository"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\'\r\n };\r\n</script>\r\n");
+
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Repository/Tree.cshtml b/GitCandy.Web/Views/Repository/Tree.cshtml
new file mode 100644
index 0000000..6f17661
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/Tree.cshtml
@@ -0,0 +1,116 @@
+@model GitCandy.Models.TreeModel
+
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Repository_TreeTitle, Model.RepositoryName, Model.ReferenceName ?? Model.Commit.Sha.ToShortSha(), Model.Path));
+}
+
+<h3>@Html.ActionLink(Model.RepositoryName, "Tree", Html.OverRoute(new { path = "" }))</h3>
+
+@if (Model.Entries == null)
+{
+ <div>
+ @Html.ActionLink(SR.Shared_Detail, "Detail", Html.OverRoute(), new { @class = "btn btn-default pull-right" })
+ @Html.Partial("_GitUrlButton", Model.GitUrls)
+ </div>
+ <div class="alert alert-info">@SR.Repository_EmptyWords</div>
+}
+else
+{
+ <div>
+ @if (Model.IsRoot)
+ {
+ <h5>@Model.Description</h5>
+ <div class="border-area">
+ <ul class="nav nav-justified">
+ <li>@Html.ActionLink(Model.Scope.Commits + " " + SR.Repository_Commits, "Commits", Html.OverRoute())</li>
+ <li>@Html.ActionLink(Model.Scope.Branches + " " + SR.Repository_Branches, "Branches", Html.OverRoute(new { path = "" }))</li>
+ <li>@Html.ActionLink(Model.Scope.Tags + " " + SR.Repository_Tags, "Tags", Html.OverRoute(new { path = "" }))</li>
+ <li>@Html.ActionLink(Model.Scope.Contributors + " " + SR.Repository_Contributors, "Contributors", Html.OverRoute())</li>
+ </ul>
+ </div>
+ }
+
+ <div>
+ @if (Model.IsRoot)
+ {
+ @Html.ActionLink(SR.Shared_Detail, "Detail", Html.OverRoute(), new { @class = "btn btn-default pull-right" })
+ @Html.Partial("_BranchSelector", Model.BranchSelector)
+ @Html.Partial("_ZipButton", Model.ReferenceName ?? Model.Commit.Sha)
+ <a href="@Url.Action("Compare", Html.OverRoute(new { path = "" }))" class="btn btn-default"><span class="glyphicon glyphicon-retweet"></span>@SR.Repository_Compare</a>
+ @Html.Partial("_GitUrlButton", Model.GitUrls)
+ }
+ else
+ {
+ @Html.Partial("_BranchSelector", Model.BranchSelector)
+ <div class="btn-group">
+ @Html.ActionLink(SR.Repository_History, "Commits", Html.OverRoute(new { path = (Model.ReferenceName ?? Model.Commit.Sha) + "/" + Model.Path }), new { @class = "btn btn-default" })
+ </div>
+ }
+ </div>
+ @Html.Partial("_PathBar", Model.PathBar)
+ <div class="border-area table-responsive">
+ <table class="table table-hover table-striped">
+ <caption>
+ <div class="clearfix">
+ <div title="@Model.Commit.CommitMessageShort" class="pull-left">@Html.ActionLink(Model.Commit.CommitMessageShort.ShortString(80), "Commit", Html.OverRoute(new { path = Model.Commit.Sha }))</div>
+ </div>
+ <div class="clearfix">
+ <strong title="@Model.Commit.Author">@Html.Link(Model.Commit.Author)</strong>
+ <span>@SR.Repository_AuthoredAt</span>
+ <span title="@Model.Commit.Author.When">@Model.Commit.Author.When.LocalDateTime.ToFullString()</span>
+ @if (Model.Commit.Author != Model.Commit.Committer)
+ {
+ <strong title="@Model.Commit.Committer">@Model.Commit.Committer.Name</strong>
+ <span>@SR.Repository_CommittedAt</span>
+ <span title="@Model.Commit.Committer.When">@Model.Commit.Committer.When.LocalDateTime.ToFullString()</span>
+ }
+ <div class="pull-right">@Model.Commit.Sha.ToShortSha()</div>
+ </div>
+ </caption>
+ <tbody>
+ @foreach (var entry in Model.Entries)
+ {
+ <tr>
+ <td>
+ <span title="@entry.Name">
+ @if (entry.EntryType == LibGit2Sharp.TreeEntryTargetType.Tree)
+ { <span class="glyphicon glyphicon-folder-close"></span> }
+ else if (entry.EntryType == LibGit2Sharp.TreeEntryTargetType.Blob)
+ { <span class="glyphicon glyphicon-file"></span> }
+ else if (entry.EntryType == LibGit2Sharp.TreeEntryTargetType.GitLink)
+ { <i class="glyphicon glyphicon-bookmark"></i> }
+ else
+ { <span class="glyphicon glyphicon-leaf"></span> }
+ @if (entry.EntryType == LibGit2Sharp.TreeEntryTargetType.GitLink)
+ { @entry.Name.ShortString(25) }
+ else
+ { @Html.ActionLink(entry.Name.ShortString(25), entry.EntryType.ToString(), Html.OverRoute(new { path = (Model.ReferenceName ?? Model.Commit.Sha) + "/" + entry.Path })) }
+ </span>
+ </td>
+ <td><span title="@entry.Commit.CommitMessageShort">@(entry.Commit.Sha == null ? Html.Raw(entry.Commit.CommitMessageShort) : Html.ActionLink(entry.Commit.CommitMessageShort.ShortString(70), "Commit", Html.OverRoute(new { path = entry.Commit.Sha })))</span></td>
+ <td title="@entry.Commit.Author">@entry.Commit.Author.Name.ShortString(20)</td>
+ <td title="@entry.Commit.Author.When">@entry.Commit.Author.When.LocalDateTime.ToFullString()</td>
+ </tr>
+ }
+ </tbody>
+ </table>
+ </div>
+ @if (Model.Readme != null)
+ {
+ <div class="border-area">
+ <table class="table">
+ <caption>
+ <div class="pull-left keep-space"><i class="glyphicon glyphicon-list-alt"></i> @Model.Readme.Name</div>
+ </caption>
+ <tbody>
+ <tr>
+ <td>
+ @Html.Partial("_BlobPreview", Model.Readme)
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ }
+ </div>
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Views/Repository/Tree.generated.cs b/GitCandy.Web/Views/Repository/Tree.generated.cs
new file mode 100644
index 0000000..88f86aa
--- /dev/null
+++ b/GitCandy.Web/Views/Repository/Tree.generated.cs
@@ -0,0 +1,834 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Repository/Tree.cshtml")]
+ public partial class _Views_Repository_Tree_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.TreeModel>
+ {
+ public _Views_Repository_Tree_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 3 "..\..\Views\Repository\Tree.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Repository_TreeTitle, Model.RepositoryName, Model.ReferenceName ?? Model.Commit.Sha.ToShortSha(), Model.Path));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<h3>");
+
+
+ #line 7 "..\..\Views\Repository\Tree.cshtml"
+Write(Html.ActionLink(Model.RepositoryName, "Tree", Html.OverRoute(new { path = "" })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h3>\r\n\r\n");
+
+
+ #line 9 "..\..\Views\Repository\Tree.cshtml"
+ if (Model.Entries == null)
+{
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <div>\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 12 "..\..\Views\Repository\Tree.cshtml"
+ Write(Html.ActionLink(SR.Shared_Detail, "Detail", Html.OverRoute(), new { @class = "btn btn-default pull-right" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 13 "..\..\Views\Repository\Tree.cshtml"
+ Write(Html.Partial("_GitUrlButton", Model.GitUrls));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n");
+
+WriteLiteral(" <div");
+
+WriteLiteral(" class=\"alert alert-info\"");
+
+WriteLiteral(">");
+
+
+ #line 15 "..\..\Views\Repository\Tree.cshtml"
+ Write(SR.Repository_EmptyWords);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n");
+
+
+ #line 16 "..\..\Views\Repository\Tree.cshtml"
+}
+else
+{
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <div>\r\n");
+
+
+ #line 20 "..\..\Views\Repository\Tree.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 20 "..\..\Views\Repository\Tree.cshtml"
+ if (Model.IsRoot)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <h5>");
+
+
+ #line 22 "..\..\Views\Repository\Tree.cshtml"
+ Write(Model.Description);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h5>\r\n");
+
+WriteLiteral(" <div");
+
+WriteLiteral(" class=\"border-area\"");
+
+WriteLiteral(">\r\n <ul");
+
+WriteLiteral(" class=\"nav nav-justified\"");
+
+WriteLiteral(">\r\n <li>");
+
+
+ #line 25 "..\..\Views\Repository\Tree.cshtml"
+ Write(Html.ActionLink(Model.Scope.Commits + " " + SR.Repository_Commits, "Commits", Html.OverRoute()));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</li>\r\n <li>");
+
+
+ #line 26 "..\..\Views\Repository\Tree.cshtml"
+ Write(Html.ActionLink(Model.Scope.Branches + " " + SR.Repository_Branches, "Branches", Html.OverRoute(new { path = "" })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</li>\r\n <li>");
+
+
+ #line 27 "..\..\Views\Repository\Tree.cshtml"
+ Write(Html.ActionLink(Model.Scope.Tags + " " + SR.Repository_Tags, "Tags", Html.OverRoute(new { path = "" })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</li>\r\n <li>");
+
+
+ #line 28 "..\..\Views\Repository\Tree.cshtml"
+ Write(Html.ActionLink(Model.Scope.Contributors + " " + SR.Repository_Contributors, "Contributors", Html.OverRoute()));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</li>\r\n </ul>\r\n </div>\r\n");
+
+
+ #line 31 "..\..\Views\Repository\Tree.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n <div>\r\n");
+
+
+ #line 34 "..\..\Views\Repository\Tree.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 34 "..\..\Views\Repository\Tree.cshtml"
+ if (Model.IsRoot)
+ {
+
+
+ #line default
+ #line hidden
+
+ #line 36 "..\..\Views\Repository\Tree.cshtml"
+ Write(Html.ActionLink(SR.Shared_Detail, "Detail", Html.OverRoute(), new { @class = "btn btn-default pull-right" }));
+
+
+ #line default
+ #line hidden
+
+ #line 36 "..\..\Views\Repository\Tree.cshtml"
+
+
+
+ #line default
+ #line hidden
+
+ #line 37 "..\..\Views\Repository\Tree.cshtml"
+ Write(Html.Partial("_BranchSelector", Model.BranchSelector));
+
+
+ #line default
+ #line hidden
+
+ #line 37 "..\..\Views\Repository\Tree.cshtml"
+
+
+
+ #line default
+ #line hidden
+
+ #line 38 "..\..\Views\Repository\Tree.cshtml"
+ Write(Html.Partial("_ZipButton", Model.ReferenceName ?? Model.Commit.Sha));
+
+
+ #line default
+ #line hidden
+
+ #line 38 "..\..\Views\Repository\Tree.cshtml"
+
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <a");
+
+WriteAttribute("href", Tuple.Create(" href=\"", 1784), Tuple.Create("\"", 1848)
+
+ #line 39 "..\..\Views\Repository\Tree.cshtml"
+, Tuple.Create(Tuple.Create("", 1791), Tuple.Create<System.Object, System.Int32>(Url.Action("Compare", Html.OverRoute(new { path = "" }))
+
+ #line default
+ #line hidden
+, 1791), false)
+);
+
+WriteLiteral(" class=\"btn btn-default\"");
+
+WriteLiteral("><span");
+
+WriteLiteral(" class=\"glyphicon glyphicon-retweet\"");
+
+WriteLiteral("></span>");
+
+
+ #line 39 "..\..\Views\Repository\Tree.cshtml"
+ Write(SR.Repository_Compare);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</a>\r\n");
+
+
+ #line 40 "..\..\Views\Repository\Tree.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 40 "..\..\Views\Repository\Tree.cshtml"
+ Write(Html.Partial("_GitUrlButton", Model.GitUrls));
+
+
+ #line default
+ #line hidden
+
+ #line 40 "..\..\Views\Repository\Tree.cshtml"
+
+ }
+ else
+ {
+
+
+ #line default
+ #line hidden
+
+ #line 44 "..\..\Views\Repository\Tree.cshtml"
+ Write(Html.Partial("_BranchSelector", Model.BranchSelector));
+
+
+ #line default
+ #line hidden
+
+ #line 44 "..\..\Views\Repository\Tree.cshtml"
+
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <div");
+
+WriteLiteral(" class=\"btn-group\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 46 "..\..\Views\Repository\Tree.cshtml"
+ Write(Html.ActionLink(SR.Repository_History, "Commits", Html.OverRoute(new { path = (Model.ReferenceName ?? Model.Commit.Sha) + "/" + Model.Path }), new { @class = "btn btn-default" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n");
+
+
+ #line 48 "..\..\Views\Repository\Tree.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" </div>\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 50 "..\..\Views\Repository\Tree.cshtml"
+ Write(Html.Partial("_PathBar", Model.PathBar));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n <div");
+
+WriteLiteral(" class=\"border-area table-responsive\"");
+
+WriteLiteral(">\r\n <table");
+
+WriteLiteral(" class=\"table table-hover table-striped\"");
+
+WriteLiteral(">\r\n <caption>\r\n <div");
+
+WriteLiteral(" class=\"clearfix\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 2693), Tuple.Create("\"", 2733)
+
+ #line 55 "..\..\Views\Repository\Tree.cshtml"
+, Tuple.Create(Tuple.Create("", 2701), Tuple.Create<System.Object, System.Int32>(Model.Commit.CommitMessageShort
+
+ #line default
+ #line hidden
+, 2701), false)
+);
+
+WriteLiteral(" class=\"pull-left\"");
+
+WriteLiteral(">");
+
+
+ #line 55 "..\..\Views\Repository\Tree.cshtml"
+ Write(Html.ActionLink(Model.Commit.CommitMessageShort.ShortString(80), "Commit", Html.OverRoute(new { path = Model.Commit.Sha })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n </div>\r\n <div");
+
+WriteLiteral(" class=\"clearfix\"");
+
+WriteLiteral(">\r\n <strong");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 2988), Tuple.Create("\"", 3016)
+
+ #line 58 "..\..\Views\Repository\Tree.cshtml"
+, Tuple.Create(Tuple.Create("", 2996), Tuple.Create<System.Object, System.Int32>(Model.Commit.Author
+
+ #line default
+ #line hidden
+, 2996), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 58 "..\..\Views\Repository\Tree.cshtml"
+ Write(Html.Link(Model.Commit.Author));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</strong>\r\n <span>");
+
+
+ #line 59 "..\..\Views\Repository\Tree.cshtml"
+ Write(SR.Repository_AuthoredAt);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span>\r\n <span");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 3153), Tuple.Create("\"", 3186)
+
+ #line 60 "..\..\Views\Repository\Tree.cshtml"
+, Tuple.Create(Tuple.Create("", 3161), Tuple.Create<System.Object, System.Int32>(Model.Commit.Author.When
+
+ #line default
+ #line hidden
+, 3161), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 60 "..\..\Views\Repository\Tree.cshtml"
+ Write(Model.Commit.Author.When.LocalDateTime.ToFullString());
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span>\r\n");
+
+
+ #line 61 "..\..\Views\Repository\Tree.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 61 "..\..\Views\Repository\Tree.cshtml"
+ if (Model.Commit.Author != Model.Commit.Committer)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <strong");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 3390), Tuple.Create("\"", 3421)
+
+ #line 63 "..\..\Views\Repository\Tree.cshtml"
+, Tuple.Create(Tuple.Create("", 3398), Tuple.Create<System.Object, System.Int32>(Model.Commit.Committer
+
+ #line default
+ #line hidden
+, 3398), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 63 "..\..\Views\Repository\Tree.cshtml"
+ Write(Model.Commit.Committer.Name);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</strong>\r\n");
+
+WriteLiteral(" <span>");
+
+
+ #line 64 "..\..\Views\Repository\Tree.cshtml"
+ Write(SR.Repository_CommittedAt);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span>\r\n");
+
+WriteLiteral(" <span");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 3564), Tuple.Create("\"", 3600)
+
+ #line 65 "..\..\Views\Repository\Tree.cshtml"
+, Tuple.Create(Tuple.Create("", 3572), Tuple.Create<System.Object, System.Int32>(Model.Commit.Committer.When
+
+ #line default
+ #line hidden
+, 3572), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 65 "..\..\Views\Repository\Tree.cshtml"
+ Write(Model.Commit.Committer.When.LocalDateTime.ToFullString());
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span>\r\n");
+
+
+ #line 66 "..\..\Views\Repository\Tree.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <div");
+
+WriteLiteral(" class=\"pull-right\"");
+
+WriteLiteral(">");
+
+
+ #line 67 "..\..\Views\Repository\Tree.cshtml"
+ Write(Model.Commit.Sha.ToShortSha());
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n </div>\r\n </caption>\r\n <" +
+"tbody>\r\n");
+
+
+ #line 71 "..\..\Views\Repository\Tree.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 71 "..\..\Views\Repository\Tree.cshtml"
+ foreach (var entry in Model.Entries)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <tr>\r\n <td>\r\n " +
+" <span");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 4045), Tuple.Create("\"", 4064)
+
+ #line 75 "..\..\Views\Repository\Tree.cshtml"
+, Tuple.Create(Tuple.Create("", 4053), Tuple.Create<System.Object, System.Int32>(entry.Name
+
+ #line default
+ #line hidden
+, 4053), false)
+);
+
+WriteLiteral(">\r\n");
+
+
+ #line 76 "..\..\Views\Repository\Tree.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 76 "..\..\Views\Repository\Tree.cshtml"
+ if (entry.EntryType == LibGit2Sharp.TreeEntryTargetType.Tree)
+ {
+
+ #line default
+ #line hidden
+WriteLiteral(" <span");
+
+WriteLiteral(" class=\"glyphicon glyphicon-folder-close\"");
+
+WriteLiteral("></span> ");
+
+
+ #line 77 "..\..\Views\Repository\Tree.cshtml"
+ }
+ else if (entry.EntryType == LibGit2Sharp.TreeEntryTargetType.Blob)
+ {
+
+ #line default
+ #line hidden
+WriteLiteral(" <span");
+
+WriteLiteral(" class=\"glyphicon glyphicon-file\"");
+
+WriteLiteral("></span> ");
+
+
+ #line 79 "..\..\Views\Repository\Tree.cshtml"
+ }
+ else if (entry.EntryType == LibGit2Sharp.TreeEntryTargetType.GitLink)
+ {
+
+ #line default
+ #line hidden
+WriteLiteral(" <i");
+
+WriteLiteral(" class=\"glyphicon glyphicon-bookmark\"");
+
+WriteLiteral("></i> ");
+
+
+ #line 81 "..\..\Views\Repository\Tree.cshtml"
+ }
+ else
+ {
+
+ #line default
+ #line hidden
+WriteLiteral(" <span");
+
+WriteLiteral(" class=\"glyphicon glyphicon-leaf\"");
+
+WriteLiteral("></span> ");
+
+
+ #line 83 "..\..\Views\Repository\Tree.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" ");
+
+
+ #line 84 "..\..\Views\Repository\Tree.cshtml"
+ if (entry.EntryType == LibGit2Sharp.TreeEntryTargetType.GitLink)
+ {
+
+ #line default
+ #line hidden
+
+ #line 85 "..\..\Views\Repository\Tree.cshtml"
+ Write(entry.Name.ShortString(25));
+
+
+ #line default
+ #line hidden
+
+ #line 85 "..\..\Views\Repository\Tree.cshtml"
+ }
+ else
+ {
+
+ #line default
+ #line hidden
+
+ #line 87 "..\..\Views\Repository\Tree.cshtml"
+ Write(Html.ActionLink(entry.Name.ShortString(25), entry.EntryType.ToString(), Html.OverRoute(new { path = (Model.ReferenceName ?? Model.Commit.Sha) + "/" + entry.Path })));
+
+
+ #line default
+ #line hidden
+
+ #line 87 "..\..\Views\Repository\Tree.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" </span>\r\n </td>\r\n " +
+" <td><span");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 5313), Tuple.Create("\"", 5353)
+
+ #line 90 "..\..\Views\Repository\Tree.cshtml"
+, Tuple.Create(Tuple.Create("", 5321), Tuple.Create<System.Object, System.Int32>(entry.Commit.CommitMessageShort
+
+ #line default
+ #line hidden
+, 5321), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 90 "..\..\Views\Repository\Tree.cshtml"
+ Write(entry.Commit.Sha == null ? Html.Raw(entry.Commit.CommitMessageShort) : Html.ActionLink(entry.Commit.CommitMessageShort.ShortString(70), "Commit", Html.OverRoute(new { path = entry.Commit.Sha })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span></td>\r\n <td");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 5597), Tuple.Create("\"", 5625)
+
+ #line 91 "..\..\Views\Repository\Tree.cshtml"
+, Tuple.Create(Tuple.Create("", 5605), Tuple.Create<System.Object, System.Int32>(entry.Commit.Author
+
+ #line default
+ #line hidden
+, 5605), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 91 "..\..\Views\Repository\Tree.cshtml"
+ Write(entry.Commit.Author.Name.ShortString(20));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td>\r\n <td");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 5706), Tuple.Create("\"", 5739)
+
+ #line 92 "..\..\Views\Repository\Tree.cshtml"
+, Tuple.Create(Tuple.Create("", 5714), Tuple.Create<System.Object, System.Int32>(entry.Commit.Author.When
+
+ #line default
+ #line hidden
+, 5714), false)
+);
+
+WriteLiteral(">");
+
+
+ #line 92 "..\..\Views\Repository\Tree.cshtml"
+ Write(entry.Commit.Author.When.LocalDateTime.ToFullString());
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td>\r\n </tr>\r\n");
+
+
+ #line 94 "..\..\Views\Repository\Tree.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" </tbody>\r\n </table>\r\n </div>\r\n");
+
+
+ #line 98 "..\..\Views\Repository\Tree.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 98 "..\..\Views\Repository\Tree.cshtml"
+ if (Model.Readme != null)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <div");
+
+WriteLiteral(" class=\"border-area\"");
+
+WriteLiteral(">\r\n <table");
+
+WriteLiteral(" class=\"table\"");
+
+WriteLiteral(">\r\n <caption>\r\n <div");
+
+WriteLiteral(" class=\"pull-left keep-space\"");
+
+WriteLiteral("><i");
+
+WriteLiteral(" class=\"glyphicon glyphicon-list-alt\"");
+
+WriteLiteral("></i> ");
+
+
+ #line 103 "..\..\Views\Repository\Tree.cshtml"
+ Write(Model.Readme.Name);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n </caption>\r\n <tbody>\r\n " +
+" <tr>\r\n <td>\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 108 "..\..\Views\Repository\Tree.cshtml"
+ Write(Html.Partial("_BlobPreview", Model.Readme));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </td>\r\n </tr>\r\n " +
+" </tbody>\r\n </table>\r\n </div>\r\n");
+
+
+ #line 114 "..\..\Views\Repository\Tree.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" </div>\r\n");
+
+
+ #line 116 "..\..\Views\Repository\Tree.cshtml"
+}
+
+ #line default
+ #line hidden
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Setting/Edit.cshtml b/GitCandy.Web/Views/Setting/Edit.cshtml
new file mode 100644
index 0000000..fc46636
--- /dev/null
+++ b/GitCandy.Web/Views/Setting/Edit.cshtml
@@ -0,0 +1,94 @@
+@model GitCandy.Models.SettingModel
+
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, SR.Setting_EditTitle);
+}
+
+<h4>@SR.Setting_EditTitle</h4>
+
+
+@using (Html.BeginForm("Edit", "Setting", FormMethod.Post))
+{
+ <dl class="dl-horizontal col-md-8">
+ <dt>@Html.DisplayNameFor(s => s.IsPublicServer)</dt>
+ <dd>
+ <div class="switch" data-on-label="@SR.Shared_Yes" data-off-label="@SR.Shared_No">
+ @Html.CheckBoxFor(s => s.IsPublicServer, new { data_size = "small" })
+ </div>
+ </dd>
+
+ <dt>@Html.DisplayNameFor(s => s.ForceSsl)</dt>
+ <dd>
+ <div class="switch" data-on-label="@SR.Shared_Yes" data-off-label="@SR.Shared_No">
+ @Html.CheckBoxFor(s => s.ForceSsl, new { data_size = "small" })
+ </div>
+ </dd>
+
+ <dt>@Html.DisplayNameFor(s => s.EnableSsh)</dt>
+ <dd>
+ <div class="switch" data-on-label="@SR.Shared_Yes" data-off-label="@SR.Shared_No">
+ @Html.CheckBoxFor(s => s.EnableSsh, new { data_size = "small" })
+ </div>
+ </dd>
+
+ <dt>@Html.DisplayNameFor(s => s.SslPort)</dt>
+ <dd>@Html.TextBoxFor(s => s.SslPort, new { @class = "form-control" })</dd>
+
+ <dt>@Html.DisplayNameFor(s => s.SshPort)</dt>
+ <dd>@Html.TextBoxFor(s => s.SshPort, new { @class = "form-control" })</dd>
+
+
+ <dt>@Html.DisplayNameFor(s => s.LocalSkipCustomError)</dt>
+ <dd>
+ <div class="switch" data-on-label="@SR.Shared_Yes" data-off-label="@SR.Shared_No">
+ @Html.CheckBoxFor(s => s.LocalSkipCustomError, new { data_size = "small" })
+ </div>
+ </dd>
+
+ <dt>@Html.DisplayNameFor(s => s.AllowRegisterUser)</dt>
+ <dd>
+ <div class="switch" data-on-label="@SR.Shared_Yes" data-off-label="@SR.Shared_No">
+ @Html.CheckBoxFor(s => s.AllowRegisterUser, new { data_size = "small" })
+ </div>
+ </dd>
+
+ <dt>@Html.DisplayNameFor(s => s.AllowRepositoryCreation)</dt>
+ <dd>
+ <div class="switch" data-on-label="@SR.Shared_Yes" data-off-label="@SR.Shared_No">
+ @Html.CheckBoxFor(s => s.AllowRepositoryCreation, new { data_size = "small" })
+ </div>
+ </dd>
+
+ <dt>@Html.DisplayNameFor(s => s.RepositoryPath)</dt>
+ <dd>@Html.TextBoxFor(s => s.RepositoryPath, new { @class = "form-control" })</dd>
+
+ <dt>@Html.DisplayNameFor(s => s.CachePath)</dt>
+ <dd>@Html.TextBoxFor(s => s.CachePath, new { @class = "form-control" })</dd>
+
+ <dt>@Html.DisplayNameFor(s => s.GitCorePath)</dt>
+ <dd>@Html.TextBoxFor(s => s.GitCorePath, new { @class = "form-control" })</dd>
+
+ <dt>@Html.DisplayNameFor(s => s.NumberOfCommitsPerPage)</dt>
+ <dd>@Html.TextBoxFor(s => s.NumberOfCommitsPerPage, new { @class = "form-control" })</dd>
+
+ <dt>@Html.DisplayNameFor(s => s.NumberOfItemsPerList)</dt>
+ <dd>@Html.TextBoxFor(s => s.NumberOfItemsPerList, new { @class = "form-control" })</dd>
+
+ <dt>@Html.DisplayNameFor(s => s.NumberOfRepositoryContributors)</dt>
+ <dd>@Html.TextBoxFor(s => s.NumberOfRepositoryContributors, new { @class = "form-control" })</dd>
+
+ @if (!ViewData.ModelState.IsValid)
+ {
+ <dt></dt>
+ <dd>@Html.ValidationSummary(true, SR.Setting_UpdateSettingsUnsuccessfull, new { @class = "alert alert-dismissable alert-danger" })</dd>
+ }
+
+ <dt></dt>
+ <dd>
+ <button type="submit" class="btn btn-primary">@SR.Shared_Save</button>
+ <button type="reset" class="btn btn-inverse">@SR.Shared_Reset</button>
+ @Html.ActionLink(SR.Setting_ReGenSsh, "ReGenSsh", null, new { @class = "btn btn-danger" })
+ @Html.ActionLink(SR.Shared_Restart, "Restart", null, new { @class = "btn btn-danger" })
+ </dd>
+ </dl>
+}
diff --git a/GitCandy.Web/Views/Setting/Edit.generated.cs b/GitCandy.Web/Views/Setting/Edit.generated.cs
new file mode 100644
index 0000000..c615d08
--- /dev/null
+++ b/GitCandy.Web/Views/Setting/Edit.generated.cs
@@ -0,0 +1,603 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Setting/Edit.cshtml")]
+ public partial class _Views_Setting_Edit_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.SettingModel>
+ {
+ public _Views_Setting_Edit_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 3 "..\..\Views\Setting\Edit.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, SR.Setting_EditTitle);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<h4>");
+
+
+ #line 7 "..\..\Views\Setting\Edit.cshtml"
+Write(SR.Setting_EditTitle);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h4>\r\n\r\n\r\n");
+
+
+ #line 10 "..\..\Views\Setting\Edit.cshtml"
+ using (Html.BeginForm("Edit", "Setting", FormMethod.Post))
+{
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <dl");
+
+WriteLiteral(" class=\"dl-horizontal col-md-8\"");
+
+WriteLiteral(">\r\n <dt>");
+
+
+ #line 13 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.DisplayNameFor(s => s.IsPublicServer));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>\r\n <div");
+
+WriteLiteral(" class=\"switch\"");
+
+WriteLiteral(" data-on-label=\"");
+
+
+ #line 15 "..\..\Views\Setting\Edit.cshtml"
+ Write(SR.Shared_Yes);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral(" data-off-label=\"");
+
+
+ #line 15 "..\..\Views\Setting\Edit.cshtml"
+ Write(SR.Shared_No);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 16 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.CheckBoxFor(s => s.IsPublicServer, new { data_size = "small" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n </dd>\r\n\r\n <dt>");
+
+
+ #line 20 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.DisplayNameFor(s => s.ForceSsl));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>\r\n <div");
+
+WriteLiteral(" class=\"switch\"");
+
+WriteLiteral(" data-on-label=\"");
+
+
+ #line 22 "..\..\Views\Setting\Edit.cshtml"
+ Write(SR.Shared_Yes);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral(" data-off-label=\"");
+
+
+ #line 22 "..\..\Views\Setting\Edit.cshtml"
+ Write(SR.Shared_No);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 23 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.CheckBoxFor(s => s.ForceSsl, new { data_size = "small" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n </dd>\r\n\r\n <dt>");
+
+
+ #line 27 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.DisplayNameFor(s => s.EnableSsh));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>\r\n <div");
+
+WriteLiteral(" class=\"switch\"");
+
+WriteLiteral(" data-on-label=\"");
+
+
+ #line 29 "..\..\Views\Setting\Edit.cshtml"
+ Write(SR.Shared_Yes);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral(" data-off-label=\"");
+
+
+ #line 29 "..\..\Views\Setting\Edit.cshtml"
+ Write(SR.Shared_No);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 30 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.CheckBoxFor(s => s.EnableSsh, new { data_size = "small" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n </dd>\r\n\r\n <dt>");
+
+
+ #line 34 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.DisplayNameFor(s => s.SslPort));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 35 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.TextBoxFor(s => s.SslPort, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt>");
+
+
+ #line 37 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.DisplayNameFor(s => s.SshPort));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 38 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.TextBoxFor(s => s.SshPort, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n\r\n <dt>");
+
+
+ #line 41 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.DisplayNameFor(s => s.LocalSkipCustomError));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>\r\n <div");
+
+WriteLiteral(" class=\"switch\"");
+
+WriteLiteral(" data-on-label=\"");
+
+
+ #line 43 "..\..\Views\Setting\Edit.cshtml"
+ Write(SR.Shared_Yes);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral(" data-off-label=\"");
+
+
+ #line 43 "..\..\Views\Setting\Edit.cshtml"
+ Write(SR.Shared_No);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 44 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.CheckBoxFor(s => s.LocalSkipCustomError, new { data_size = "small" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n </dd>\r\n\r\n <dt>");
+
+
+ #line 48 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.DisplayNameFor(s => s.AllowRegisterUser));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>\r\n <div");
+
+WriteLiteral(" class=\"switch\"");
+
+WriteLiteral(" data-on-label=\"");
+
+
+ #line 50 "..\..\Views\Setting\Edit.cshtml"
+ Write(SR.Shared_Yes);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral(" data-off-label=\"");
+
+
+ #line 50 "..\..\Views\Setting\Edit.cshtml"
+ Write(SR.Shared_No);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 51 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.CheckBoxFor(s => s.AllowRegisterUser, new { data_size = "small" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n </dd>\r\n\r\n <dt>");
+
+
+ #line 55 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.DisplayNameFor(s => s.AllowRepositoryCreation));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>\r\n <div");
+
+WriteLiteral(" class=\"switch\"");
+
+WriteLiteral(" data-on-label=\"");
+
+
+ #line 57 "..\..\Views\Setting\Edit.cshtml"
+ Write(SR.Shared_Yes);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral(" data-off-label=\"");
+
+
+ #line 57 "..\..\Views\Setting\Edit.cshtml"
+ Write(SR.Shared_No);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 58 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.CheckBoxFor(s => s.AllowRepositoryCreation, new { data_size = "small" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n </dd>\r\n\r\n <dt>");
+
+
+ #line 62 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.DisplayNameFor(s => s.RepositoryPath));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 63 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.TextBoxFor(s => s.RepositoryPath, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt>");
+
+
+ #line 65 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.DisplayNameFor(s => s.CachePath));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 66 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.TextBoxFor(s => s.CachePath, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt>");
+
+
+ #line 68 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.DisplayNameFor(s => s.GitCorePath));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 69 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.TextBoxFor(s => s.GitCorePath, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt>");
+
+
+ #line 71 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.DisplayNameFor(s => s.NumberOfCommitsPerPage));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 72 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.TextBoxFor(s => s.NumberOfCommitsPerPage, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt>");
+
+
+ #line 74 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.DisplayNameFor(s => s.NumberOfItemsPerList));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 75 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.TextBoxFor(s => s.NumberOfItemsPerList, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt>");
+
+
+ #line 77 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.DisplayNameFor(s => s.NumberOfRepositoryContributors));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 78 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.TextBoxFor(s => s.NumberOfRepositoryContributors, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n");
+
+
+ #line 80 "..\..\Views\Setting\Edit.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 80 "..\..\Views\Setting\Edit.cshtml"
+ if (!ViewData.ModelState.IsValid)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <dt></dt>\r\n");
+
+WriteLiteral(" <dd>");
+
+
+ #line 83 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.ValidationSummary(true, SR.Setting_UpdateSettingsUnsuccessfull, new { @class = "alert alert-dismissable alert-danger" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n");
+
+
+ #line 84 "..\..\Views\Setting\Edit.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n <dt></dt>\r\n <dd>\r\n <button");
+
+WriteLiteral(" type=\"submit\"");
+
+WriteLiteral(" class=\"btn btn-primary\"");
+
+WriteLiteral(">");
+
+
+ #line 88 "..\..\Views\Setting\Edit.cshtml"
+ Write(SR.Shared_Save);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</button> \r\n <button");
+
+WriteLiteral(" type=\"reset\"");
+
+WriteLiteral(" class=\"btn btn-inverse\"");
+
+WriteLiteral(">");
+
+
+ #line 89 "..\..\Views\Setting\Edit.cshtml"
+ Write(SR.Shared_Reset);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</button> \r\n");
+
+WriteLiteral(" ");
+
+
+ #line 90 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.ActionLink(SR.Setting_ReGenSsh, "ReGenSsh", null, new { @class = "btn btn-danger" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral(" \r\n");
+
+WriteLiteral(" ");
+
+
+ #line 91 "..\..\Views\Setting\Edit.cshtml"
+ Write(Html.ActionLink(SR.Shared_Restart, "Restart", null, new { @class = "btn btn-danger" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral(" \r\n </dd>\r\n </dl>\r\n");
+
+
+ #line 94 "..\..\Views\Setting\Edit.cshtml"
+}
+
+
+ #line default
+ #line hidden
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Setting/ReGenSsh.cshtml b/GitCandy.Web/Views/Setting/ReGenSsh.cshtml
new file mode 100644
index 0000000..2efafc4
--- /dev/null
+++ b/GitCandy.Web/Views/Setting/ReGenSsh.cshtml
@@ -0,0 +1,21 @@
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Setting_ReGenSshTitle));
+}
+
+<div class="panel panel-danger">
+ <div class="panel-heading">
+ <h4 class="panel-title">@SR.Shared_Conform</h4>
+ </div>
+ <div class="panel-body">
+ @SR.Setting_ReGenSshWords
+ </div>
+</div>
+
+<div>
+ <div class="pull-left">
+ @Html.ActionLink(SR.Shared_Back, "Edit", "Setting", null, new { @class = "btn btn-default" })
+ </div>
+ <div class="pull-right">
+ @Html.ActionLink(SR.Shared_Generate, "ReGenSsh", "Setting", new { Conform = "Yes" }, new { @class = "btn btn-danger" })
+ </div>
+</div>
diff --git a/GitCandy.Web/Views/Setting/ReGenSsh.generated.cs b/GitCandy.Web/Views/Setting/ReGenSsh.generated.cs
new file mode 100644
index 0000000..4b434dc
--- /dev/null
+++ b/GitCandy.Web/Views/Setting/ReGenSsh.generated.cs
@@ -0,0 +1,131 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Setting/ReGenSsh.cshtml")]
+ public partial class _Views_Setting_ReGenSsh_cshtml : System.Web.Mvc.WebViewPage<dynamic>
+ {
+ public _Views_Setting_ReGenSsh_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 1 "..\..\Views\Setting\ReGenSsh.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Setting_ReGenSshTitle));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<div");
+
+WriteLiteral(" class=\"panel panel-danger\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"panel-heading\"");
+
+WriteLiteral(">\r\n <h4");
+
+WriteLiteral(" class=\"panel-title\"");
+
+WriteLiteral(">");
+
+
+ #line 7 "..\..\Views\Setting\ReGenSsh.cshtml"
+ Write(SR.Shared_Conform);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h4>\r\n </div>\r\n <div");
+
+WriteLiteral(" class=\"panel-body\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 10 "..\..\Views\Setting\ReGenSsh.cshtml"
+ Write(SR.Setting_ReGenSshWords);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n</div>\r\n\r\n<div>\r\n <div");
+
+WriteLiteral(" class=\"pull-left\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 16 "..\..\Views\Setting\ReGenSsh.cshtml"
+ Write(Html.ActionLink(SR.Shared_Back, "Edit", "Setting", null, new { @class = "btn btn-default" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n <div");
+
+WriteLiteral(" class=\"pull-right\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 19 "..\..\Views\Setting\ReGenSsh.cshtml"
+ Write(Html.ActionLink(SR.Shared_Generate, "ReGenSsh", "Setting", new { Conform = "Yes" }, new { @class = "btn btn-danger" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n</div>\r\n");
+
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Setting/Restart.cshtml b/GitCandy.Web/Views/Setting/Restart.cshtml
new file mode 100644
index 0000000..b72c95a
--- /dev/null
+++ b/GitCandy.Web/Views/Setting/Restart.cshtml
@@ -0,0 +1,21 @@
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Setting_RestartTitle));
+}
+
+<div class="panel panel-danger">
+ <div class="panel-heading">
+ <h4 class="panel-title">@SR.Shared_Conform</h4>
+ </div>
+ <div class="panel-body">
+ @SR.Setting_RestartWords
+ </div>
+</div>
+
+<div>
+ <div class="pull-left">
+ @Html.ActionLink(SR.Shared_Back, "Edit", "Setting", null, new { @class = "btn btn-default" })
+ </div>
+ <div class="pull-right">
+ @Html.ActionLink(SR.Shared_Restart, "Restart", "Setting", new { Conform = "Yes" }, new { @class = "btn btn-danger" })
+ </div>
+</div>
diff --git a/GitCandy.Web/Views/Setting/Restart.generated.cs b/GitCandy.Web/Views/Setting/Restart.generated.cs
new file mode 100644
index 0000000..af59132
--- /dev/null
+++ b/GitCandy.Web/Views/Setting/Restart.generated.cs
@@ -0,0 +1,131 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Setting/Restart.cshtml")]
+ public partial class _Views_Setting_Restart_cshtml : System.Web.Mvc.WebViewPage<dynamic>
+ {
+ public _Views_Setting_Restart_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 1 "..\..\Views\Setting\Restart.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Setting_RestartTitle));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<div");
+
+WriteLiteral(" class=\"panel panel-danger\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"panel-heading\"");
+
+WriteLiteral(">\r\n <h4");
+
+WriteLiteral(" class=\"panel-title\"");
+
+WriteLiteral(">");
+
+
+ #line 7 "..\..\Views\Setting\Restart.cshtml"
+ Write(SR.Shared_Conform);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h4>\r\n </div>\r\n <div");
+
+WriteLiteral(" class=\"panel-body\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 10 "..\..\Views\Setting\Restart.cshtml"
+ Write(SR.Setting_RestartWords);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n</div>\r\n\r\n<div>\r\n <div");
+
+WriteLiteral(" class=\"pull-left\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 16 "..\..\Views\Setting\Restart.cshtml"
+ Write(Html.ActionLink(SR.Shared_Back, "Edit", "Setting", null, new { @class = "btn btn-default" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n <div");
+
+WriteLiteral(" class=\"pull-right\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 19 "..\..\Views\Setting\Restart.cshtml"
+ Write(Html.ActionLink(SR.Shared_Restart, "Restart", "Setting", new { Conform = "Yes" }, new { @class = "btn btn-danger" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n</div>\r\n");
+
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Shared/_Layout.cshtml b/GitCandy.Web/Views/Shared/_Layout.cshtml
new file mode 100644
index 0000000..6aaaa65
--- /dev/null
+++ b/GitCandy.Web/Views/Shared/_Layout.cshtml
@@ -0,0 +1,82 @@
+@{
+ var token = GitCandy.Security.Token.Current;
+}
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" lang="@ViewBag.Lang">
+<head>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>@ViewBag.Title</title>
+ <link rel="stylesheet" href="~/Content/bootstrap.css" />
+ <link rel="stylesheet" href="~/Content/bootstrap-switch.css" />
+ <link rel="stylesheet" href="~/Content/highlight.css" />
+ <link rel="stylesheet" href="~/Content/site.css" />
+</head>
+<body>
+ <div class="navbar navbar-default">
+ <div class="container">
+ <div class="navbar-header">
+ <button class="navbar-toggle" type="button" data-toggle="collapse" data-target=".navbar-responsive-collapse">
+ <span class="sr-only"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ </button>
+ <a class="navbar-brand" href="/">@SR.Shared_AppTitle<sub>Alpha</sub></a>
+ </div>
+ <div class="navbar-collapse collapse navbar-responsive-collapse">
+ <ul class="nav navbar-nav">
+ <li>@Html.ActionLink(SR.Shared_Repositories, "Index", "Repository")</li>
+ <li>@Html.ActionLink(SR.Shared_About, "About", "Home")</li>
+ @if (token != null && token.IsSystemAdministrator)
+ {
+ <li class="">@Html.ActionLink(SR.Shared_Users, "Index", "Account")</li>
+ <li class="">@Html.ActionLink(SR.Shared_Teams, "Index", "Team")</li>
+ <li class="">@Html.ActionLink(SR.Shared_Settings, "Edit", "Setting")</li>
+ }
+ </ul>
+ <ul class="nav navbar-nav navbar-right">
+ @if (token == null)
+ {
+ <li class="">@Html.ActionLink(SR.Shared_Register, "Create", "Account")</li>
+ <li class="">@Html.ActionLink(SR.Shared_Login, "Login", "Account", new { ReturnUrl = ViewContext.HttpContext.Request.Url.PathAndQuery }, null)</li>
+ }
+ else
+ {
+ <li class="">@Html.ActionLink(token.Nickname, "Detail", "Account", new { name = token.Username }, null)</li>
+ <li class="">@Html.ActionLink(SR.Shared_Logout, "Logout", "Account", new { ReturnUrl = ViewContext.HttpContext.Request.Url.PathAndQuery }, null)</li>
+ }
+ </ul>
+ </div>
+ </div>
+ </div>
+
+ <div class="container">
+ @RenderBody()
+ </div>
+
+ <div class="container footer">
+ <div class="page-divider"></div>
+ <div class="clearfix">
+ <div class="pull-right btn-group dropup">
+ <a class="dropdown-toggle" data-toggle="dropdown" href="#">@ViewBag.Language <span class="caret"></span></a>
+ <ul class="dropdown-menu">
+ <li>@Html.CultureActionLink("zh-cn")</li>
+ <li>@Html.CultureActionLink("en-us")</li>
+ <li>@Html.CultureActionLink("fr-fr")</li>
+ </ul>
+ </div>
+ <div class="pull-left"><p class="muted" title="@Profiler.Current.Elapsed">© 2002-@DateTime.Now.Year 新生命开发团队</p></div>
+ </div>
+ </div>
+
+ <script src="~/Scripts/jquery-2.0.3.js"></script>
+ <script src="~/Scripts/bootstrap.js"></script>
+ <script src="~/Scripts/bootstrap-switch.js"></script>
+ <script src="~/Scripts/bootstrap3-typeahead.js"></script>
+ <script src="~/Scripts/highlight.pack.js"></script>
+ <script src="~/Scripts/marked.js"></script>
+ <script src="~/Scripts/common.js"></script>
+ @RenderSection("scripts", required: false)
+</body>
+</html>
diff --git a/GitCandy.Web/Views/Shared/_Layout.generated.cs b/GitCandy.Web/Views/Shared/_Layout.generated.cs
new file mode 100644
index 0000000..63c56ae
--- /dev/null
+++ b/GitCandy.Web/Views/Shared/_Layout.generated.cs
@@ -0,0 +1,548 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Shared/_Layout.cshtml")]
+ public partial class _Views_Shared__Layout_cshtml : System.Web.Mvc.WebViewPage<dynamic>
+ {
+ public _Views_Shared__Layout_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 1 "..\..\Views\Shared\_Layout.cshtml"
+
+ var token = GitCandy.Security.Token.Current;
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n<!DOCTYPE html>\r\n<html");
+
+WriteLiteral(" xmlns=\"http://www.w3.org/1999/xhtml\"");
+
+WriteAttribute("lang", Tuple.Create(" lang=\"", 116), Tuple.Create("\"", 136)
+
+ #line 5 "..\..\Views\Shared\_Layout.cshtml"
+, Tuple.Create(Tuple.Create("", 123), Tuple.Create<System.Object, System.Int32>(ViewBag.Lang
+
+ #line default
+ #line hidden
+, 123), false)
+);
+
+WriteLiteral(">\r\n<head>\r\n <meta");
+
+WriteLiteral(" charset=\"utf-8\"");
+
+WriteLiteral(" />\r\n <meta");
+
+WriteLiteral(" name=\"viewport\"");
+
+WriteLiteral(" content=\"width=device-width, initial-scale=1.0\"");
+
+WriteLiteral(" />\r\n <title>");
+
+
+ #line 9 "..\..\Views\Shared\_Layout.cshtml"
+ Write(ViewBag.Title);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</title>\r\n <link");
+
+WriteLiteral(" rel=\"stylesheet\"");
+
+WriteAttribute("href", Tuple.Create(" href=\"", 317), Tuple.Create("\"", 347)
+, Tuple.Create(Tuple.Create("", 324), Tuple.Create<System.Object, System.Int32>(Href("~/Content/bootstrap.css")
+, 324), false)
+);
+
+WriteLiteral(" />\r\n <link");
+
+WriteLiteral(" rel=\"stylesheet\"");
+
+WriteAttribute("href", Tuple.Create(" href=\"", 379), Tuple.Create("\"", 416)
+, Tuple.Create(Tuple.Create("", 386), Tuple.Create<System.Object, System.Int32>(Href("~/Content/bootstrap-switch.css")
+, 386), false)
+);
+
+WriteLiteral(" />\r\n <link");
+
+WriteLiteral(" rel=\"stylesheet\"");
+
+WriteAttribute("href", Tuple.Create(" href=\"", 448), Tuple.Create("\"", 478)
+, Tuple.Create(Tuple.Create("", 455), Tuple.Create<System.Object, System.Int32>(Href("~/Content/highlight.css")
+, 455), false)
+);
+
+WriteLiteral(" />\r\n <link");
+
+WriteLiteral(" rel=\"stylesheet\"");
+
+WriteAttribute("href", Tuple.Create(" href=\"", 510), Tuple.Create("\"", 535)
+, Tuple.Create(Tuple.Create("", 517), Tuple.Create<System.Object, System.Int32>(Href("~/Content/site.css")
+, 517), false)
+);
+
+WriteLiteral(" />\r\n</head>\r\n<body>\r\n <div");
+
+WriteLiteral(" class=\"navbar navbar-default\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"container\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"navbar-header\"");
+
+WriteLiteral(">\r\n <button");
+
+WriteLiteral(" class=\"navbar-toggle\"");
+
+WriteLiteral(" type=\"button\"");
+
+WriteLiteral(" data-toggle=\"collapse\"");
+
+WriteLiteral(" data-target=\".navbar-responsive-collapse\"");
+
+WriteLiteral(">\r\n <span");
+
+WriteLiteral(" class=\"sr-only\"");
+
+WriteLiteral("></span>\r\n <span");
+
+WriteLiteral(" class=\"icon-bar\"");
+
+WriteLiteral("></span>\r\n <span");
+
+WriteLiteral(" class=\"icon-bar\"");
+
+WriteLiteral("></span>\r\n <span");
+
+WriteLiteral(" class=\"icon-bar\"");
+
+WriteLiteral("></span>\r\n </button>\r\n <a");
+
+WriteLiteral(" class=\"navbar-brand\"");
+
+WriteLiteral(" href=\"/\"");
+
+WriteLiteral(">");
+
+
+ #line 25 "..\..\Views\Shared\_Layout.cshtml"
+ Write(SR.Shared_AppTitle);
+
+
+ #line default
+ #line hidden
+WriteLiteral("<sub>Alpha</sub></a>\r\n </div>\r\n <div");
+
+WriteLiteral(" class=\"navbar-collapse collapse navbar-responsive-collapse\"");
+
+WriteLiteral(">\r\n <ul");
+
+WriteLiteral(" class=\"nav navbar-nav\"");
+
+WriteLiteral(">\r\n <li>");
+
+
+ #line 29 "..\..\Views\Shared\_Layout.cshtml"
+ Write(Html.ActionLink(SR.Shared_Repositories, "Index", "Repository"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</li>\r\n <li>");
+
+
+ #line 30 "..\..\Views\Shared\_Layout.cshtml"
+ Write(Html.ActionLink(SR.Shared_About, "About", "Home"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</li>\r\n");
+
+
+ #line 31 "..\..\Views\Shared\_Layout.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 31 "..\..\Views\Shared\_Layout.cshtml"
+ if (token != null && token.IsSystemAdministrator)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <li");
+
+WriteLiteral(" class=\"\"");
+
+WriteLiteral(">");
+
+
+ #line 33 "..\..\Views\Shared\_Layout.cshtml"
+ Write(Html.ActionLink(SR.Shared_Users, "Index", "Account"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</li>\r\n");
+
+WriteLiteral(" <li");
+
+WriteLiteral(" class=\"\"");
+
+WriteLiteral(">");
+
+
+ #line 34 "..\..\Views\Shared\_Layout.cshtml"
+ Write(Html.ActionLink(SR.Shared_Teams, "Index", "Team"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</li>\r\n");
+
+WriteLiteral(" <li");
+
+WriteLiteral(" class=\"\"");
+
+WriteLiteral(">");
+
+
+ #line 35 "..\..\Views\Shared\_Layout.cshtml"
+ Write(Html.ActionLink(SR.Shared_Settings, "Edit", "Setting"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</li>\r\n");
+
+
+ #line 36 "..\..\Views\Shared\_Layout.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" </ul>\r\n <ul");
+
+WriteLiteral(" class=\"nav navbar-nav navbar-right\"");
+
+WriteLiteral(">\r\n");
+
+
+ #line 39 "..\..\Views\Shared\_Layout.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 39 "..\..\Views\Shared\_Layout.cshtml"
+ if (token == null)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <li");
+
+WriteLiteral(" class=\"\"");
+
+WriteLiteral(">");
+
+
+ #line 41 "..\..\Views\Shared\_Layout.cshtml"
+ Write(Html.ActionLink(SR.Shared_Register, "Create", "Account"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</li>\r\n");
+
+WriteLiteral(" <li");
+
+WriteLiteral(" class=\"\"");
+
+WriteLiteral(">");
+
+
+ #line 42 "..\..\Views\Shared\_Layout.cshtml"
+ Write(Html.ActionLink(SR.Shared_Login, "Login", "Account", new { ReturnUrl = ViewContext.HttpContext.Request.Url.PathAndQuery }, null));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</li>\r\n");
+
+
+ #line 43 "..\..\Views\Shared\_Layout.cshtml"
+ }
+ else
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <li");
+
+WriteLiteral(" class=\"\"");
+
+WriteLiteral(">");
+
+
+ #line 46 "..\..\Views\Shared\_Layout.cshtml"
+ Write(Html.ActionLink(token.Nickname, "Detail", "Account", new { name = token.Username }, null));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</li>\r\n");
+
+WriteLiteral(" <li");
+
+WriteLiteral(" class=\"\"");
+
+WriteLiteral(">");
+
+
+ #line 47 "..\..\Views\Shared\_Layout.cshtml"
+ Write(Html.ActionLink(SR.Shared_Logout, "Logout", "Account", new { ReturnUrl = ViewContext.HttpContext.Request.Url.PathAndQuery }, null));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</li>\r\n");
+
+
+ #line 48 "..\..\Views\Shared\_Layout.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" </ul>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div" +
+"");
+
+WriteLiteral(" class=\"container\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 55 "..\..\Views\Shared\_Layout.cshtml"
+ Write(RenderBody());
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n\r\n <div");
+
+WriteLiteral(" class=\"container footer\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"page-divider\"");
+
+WriteLiteral("></div>\r\n <div");
+
+WriteLiteral(" class=\"clearfix\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"pull-right btn-group dropup\"");
+
+WriteLiteral(">\r\n <a");
+
+WriteLiteral(" class=\"dropdown-toggle\"");
+
+WriteLiteral(" data-toggle=\"dropdown\"");
+
+WriteLiteral(" href=\"#\"");
+
+WriteLiteral(">");
+
+
+ #line 62 "..\..\Views\Shared\_Layout.cshtml"
+ Write(ViewBag.Language);
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <span");
+
+WriteLiteral(" class=\"caret\"");
+
+WriteLiteral("></span></a>\r\n <ul");
+
+WriteLiteral(" class=\"dropdown-menu\"");
+
+WriteLiteral(">\r\n <li>");
+
+
+ #line 64 "..\..\Views\Shared\_Layout.cshtml"
+ Write(Html.CultureActionLink("zh-cn"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</li>\r\n <li>");
+
+
+ #line 65 "..\..\Views\Shared\_Layout.cshtml"
+ Write(Html.CultureActionLink("en-us"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</li>\r\n <li>");
+
+
+ #line 66 "..\..\Views\Shared\_Layout.cshtml"
+ Write(Html.CultureActionLink("fr-fr"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</li>\r\n </ul>\r\n </div>\r\n <div");
+
+WriteLiteral(" class=\"pull-left\"");
+
+WriteLiteral("><p");
+
+WriteLiteral(" class=\"muted\"");
+
+WriteAttribute("title", Tuple.Create(" title=\"", 3431), Tuple.Create("\"", 3464)
+
+ #line 69 "..\..\Views\Shared\_Layout.cshtml"
+, Tuple.Create(Tuple.Create("", 3439), Tuple.Create<System.Object, System.Int32>(Profiler.Current.Elapsed
+
+ #line default
+ #line hidden
+, 3439), false)
+);
+
+WriteLiteral(">© 2002-");
+
+
+ #line 69 "..\..\Views\Shared\_Layout.cshtml"
+ Write(DateTime.Now.Year);
+
+
+ #line default
+ #line hidden
+WriteLiteral(" 新生命开发团队</p></div>\r\n </div>\r\n </div>\r\n\r\n <script");
+
+WriteAttribute("src", Tuple.Create(" src=\"", 3557), Tuple.Create("\"", 3588)
+, Tuple.Create(Tuple.Create("", 3563), Tuple.Create<System.Object, System.Int32>(Href("~/Scripts/jquery-2.0.3.js")
+, 3563), false)
+);
+
+WriteLiteral("></script>\r\n <script");
+
+WriteAttribute("src", Tuple.Create(" src=\"", 3612), Tuple.Create("\"", 3640)
+, Tuple.Create(Tuple.Create("", 3618), Tuple.Create<System.Object, System.Int32>(Href("~/Scripts/bootstrap.js")
+, 3618), false)
+);
+
+WriteLiteral("></script>\r\n <script");
+
+WriteAttribute("src", Tuple.Create(" src=\"", 3664), Tuple.Create("\"", 3699)
+, Tuple.Create(Tuple.Create("", 3670), Tuple.Create<System.Object, System.Int32>(Href("~/Scripts/bootstrap-switch.js")
+, 3670), false)
+);
+
+WriteLiteral("></script>\r\n <script");
+
+WriteAttribute("src", Tuple.Create(" src=\"", 3723), Tuple.Create("\"", 3762)
+, Tuple.Create(Tuple.Create("", 3729), Tuple.Create<System.Object, System.Int32>(Href("~/Scripts/bootstrap3-typeahead.js")
+, 3729), false)
+);
+
+WriteLiteral("></script>\r\n <script");
+
+WriteAttribute("src", Tuple.Create(" src=\"", 3786), Tuple.Create("\"", 3819)
+, Tuple.Create(Tuple.Create("", 3792), Tuple.Create<System.Object, System.Int32>(Href("~/Scripts/highlight.pack.js")
+, 3792), false)
+);
+
+WriteLiteral("></script>\r\n <script");
+
+WriteAttribute("src", Tuple.Create(" src=\"", 3843), Tuple.Create("\"", 3868)
+, Tuple.Create(Tuple.Create("", 3849), Tuple.Create<System.Object, System.Int32>(Href("~/Scripts/marked.js")
+, 3849), false)
+);
+
+WriteLiteral("></script>\r\n <script");
+
+WriteAttribute("src", Tuple.Create(" src=\"", 3892), Tuple.Create("\"", 3917)
+, Tuple.Create(Tuple.Create("", 3898), Tuple.Create<System.Object, System.Int32>(Href("~/Scripts/common.js")
+, 3898), false)
+);
+
+WriteLiteral("></script>\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 80 "..\..\Views\Shared\_Layout.cshtml"
+Write(RenderSection("scripts", required: false));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n</body>\r\n</html>\r\n");
+
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Shared/_Pager.cshtml b/GitCandy.Web/Views/Shared/_Pager.cshtml
new file mode 100644
index 0000000..e24e8db
--- /dev/null
+++ b/GitCandy.Web/Views/Shared/_Pager.cshtml
@@ -0,0 +1,31 @@
+@{
+ var action = ViewContext.RouteData.Values["Action"] as String;
+ var pager = ViewBag.Pager as GitCandy.Base.Pager;
+}
+<div class="text-center">
+ <ul class="pagination">
+ @if (pager.HasPreviousPage)
+ {
+ <li>@Html.ActionLink("<<", action, Html.OverRoute(new { page = pager.FirstPageIndex }))</li>
+ <li>@Html.ActionLink("<", action, Html.OverRoute(new { page = pager.PreviousPageIndex }))</li>
+ }
+
+ @foreach (int page in pager)
+ {
+ if (page == pager.CurrentPageIndex)
+ {
+ <li class="active"><span>@page</span></li>
+ }
+ else
+ {
+ <li>@Html.ActionLink(page.ToString(), action, Html.OverRoute(new { page }))</li>
+ }
+ }
+
+ @if (pager.HasNextPage)
+ {
+ <li>@Html.ActionLink(">", action, Html.OverRoute(new { page = pager.NextPageIndex }))</li>
+ <li>@Html.ActionLink(">>", action, Html.OverRoute(new { page = pager.LastPageIndex }))</li>
+ }
+ </ul>
+</div>
diff --git a/GitCandy.Web/Views/Shared/_Pager.generated.cs b/GitCandy.Web/Views/Shared/_Pager.generated.cs
new file mode 100644
index 0000000..64b7c67
--- /dev/null
+++ b/GitCandy.Web/Views/Shared/_Pager.generated.cs
@@ -0,0 +1,225 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Shared/_Pager.cshtml")]
+ public partial class _Views_Shared__Pager_cshtml : System.Web.Mvc.WebViewPage<dynamic>
+ {
+ public _Views_Shared__Pager_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 1 "..\..\Views\Shared\_Pager.cshtml"
+
+ var action = ViewContext.RouteData.Values["Action"] as String;
+ var pager = ViewBag.Pager as GitCandy.Base.Pager;
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n<div");
+
+WriteLiteral(" class=\"text-center\"");
+
+WriteLiteral(">\r\n <ul");
+
+WriteLiteral(" class=\"pagination\"");
+
+WriteLiteral(">\r\n");
+
+
+ #line 7 "..\..\Views\Shared\_Pager.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 7 "..\..\Views\Shared\_Pager.cshtml"
+ if (pager.HasPreviousPage)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <li>");
+
+
+ #line 9 "..\..\Views\Shared\_Pager.cshtml"
+ Write(Html.ActionLink("<<", action, Html.OverRoute(new { page = pager.FirstPageIndex })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</li>\r\n");
+
+WriteLiteral(" <li>");
+
+
+ #line 10 "..\..\Views\Shared\_Pager.cshtml"
+ Write(Html.ActionLink("<", action, Html.OverRoute(new { page = pager.PreviousPageIndex })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</li>\r\n");
+
+
+ #line 11 "..\..\Views\Shared\_Pager.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n");
+
+
+ #line 13 "..\..\Views\Shared\_Pager.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 13 "..\..\Views\Shared\_Pager.cshtml"
+ foreach (int page in pager)
+ {
+ if (page == pager.CurrentPageIndex)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <li");
+
+WriteLiteral(" class=\"active\"");
+
+WriteLiteral("><span>");
+
+
+ #line 17 "..\..\Views\Shared\_Pager.cshtml"
+ Write(page);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</span></li>\r\n");
+
+
+ #line 18 "..\..\Views\Shared\_Pager.cshtml"
+ }
+ else
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <li>");
+
+
+ #line 21 "..\..\Views\Shared\_Pager.cshtml"
+ Write(Html.ActionLink(page.ToString(), action, Html.OverRoute(new { page })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</li>\r\n");
+
+
+ #line 22 "..\..\Views\Shared\_Pager.cshtml"
+ }
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n");
+
+
+ #line 25 "..\..\Views\Shared\_Pager.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 25 "..\..\Views\Shared\_Pager.cshtml"
+ if (pager.HasNextPage)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <li>");
+
+
+ #line 27 "..\..\Views\Shared\_Pager.cshtml"
+ Write(Html.ActionLink(">", action, Html.OverRoute(new { page = pager.NextPageIndex })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</li>\r\n");
+
+WriteLiteral(" <li>");
+
+
+ #line 28 "..\..\Views\Shared\_Pager.cshtml"
+ Write(Html.ActionLink(">>", action, Html.OverRoute(new { page = pager.LastPageIndex })));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</li>\r\n");
+
+
+ #line 29 "..\..\Views\Shared\_Pager.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" </ul>\r\n</div>\r\n");
+
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Shared/DisplayTemplates/Maps.cshtml b/GitCandy.Web/Views/Shared/DisplayTemplates/Maps.cshtml
new file mode 100644
index 0000000..a63b67d
--- /dev/null
+++ b/GitCandy.Web/Views/Shared/DisplayTemplates/Maps.cshtml
@@ -0,0 +1,13 @@
+@model IDictionary<String, String>
+
+@{
+ var controller = ViewData.ModelMetadata.AdditionalValues["Controller"] as String;
+ var i = 0;
+}
+
+@foreach (var item in Model)
+{
+ if (i++ != 0)
+ {<text> , </text>}
+ @Html.ActionLink(item.Value ?? item.Key, "Detail", controller, new { name = item.Key }, null)
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Views/Shared/DisplayTemplates/Maps.generated.cs b/GitCandy.Web/Views/Shared/DisplayTemplates/Maps.generated.cs
new file mode 100644
index 0000000..006c2c8
--- /dev/null
+++ b/GitCandy.Web/Views/Shared/DisplayTemplates/Maps.generated.cs
@@ -0,0 +1,98 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Shared/DisplayTemplates/Maps.cshtml")]
+ public partial class _Views_Shared_DisplayTemplates_Maps_cshtml_ : System.Web.Mvc.WebViewPage<IDictionary<String, String>>
+ {
+ public _Views_Shared_DisplayTemplates_Maps_cshtml_()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 3 "..\..\Views\Shared\DisplayTemplates\Maps.cshtml"
+
+ var controller = ViewData.ModelMetadata.AdditionalValues["Controller"] as String;
+ var i = 0;
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n");
+
+
+ #line 8 "..\..\Views\Shared\DisplayTemplates\Maps.cshtml"
+ foreach (var item in Model)
+{
+ if (i++ != 0)
+ {
+
+ #line default
+ #line hidden
+WriteLiteral(" , ");
+
+
+ #line 11 "..\..\Views\Shared\DisplayTemplates\Maps.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+
+ #line 12 "..\..\Views\Shared\DisplayTemplates\Maps.cshtml"
+Write(Html.ActionLink(item.Value ?? item.Key, "Detail", controller, new { name = item.Key }, null));
+
+
+ #line default
+ #line hidden
+
+ #line 12 "..\..\Views\Shared\DisplayTemplates\Maps.cshtml"
+
+}
+
+ #line default
+ #line hidden
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Shared/DisplayTemplates/Members.cshtml b/GitCandy.Web/Views/Shared/DisplayTemplates/Members.cshtml
new file mode 100644
index 0000000..97c68c9
--- /dev/null
+++ b/GitCandy.Web/Views/Shared/DisplayTemplates/Members.cshtml
@@ -0,0 +1,13 @@
+@model String[]
+
+@{
+ var controller = ViewData.ModelMetadata.AdditionalValues["Controller"] as String;
+}
+
+@for (var i = 0; i < Model.Length; i++)
+{
+ var item = Model[i];
+ if (i != 0)
+ {<text> , </text>}
+ @Html.ActionLink(item, "Detail", controller, new { name = item }, null)
+}
\ No newline at end of file
diff --git a/GitCandy.Web/Views/Shared/DisplayTemplates/Members.generated.cs b/GitCandy.Web/Views/Shared/DisplayTemplates/Members.generated.cs
new file mode 100644
index 0000000..cc7aad1
--- /dev/null
+++ b/GitCandy.Web/Views/Shared/DisplayTemplates/Members.generated.cs
@@ -0,0 +1,98 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Shared/DisplayTemplates/Members.cshtml")]
+ public partial class _Views_Shared_DisplayTemplates_Members_cshtml_ : System.Web.Mvc.WebViewPage<String[]>
+ {
+ public _Views_Shared_DisplayTemplates_Members_cshtml_()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 3 "..\..\Views\Shared\DisplayTemplates\Members.cshtml"
+
+ var controller = ViewData.ModelMetadata.AdditionalValues["Controller"] as String;
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n");
+
+
+ #line 7 "..\..\Views\Shared\DisplayTemplates\Members.cshtml"
+ for (var i = 0; i < Model.Length; i++)
+{
+ var item = Model[i];
+ if (i != 0)
+ {
+
+ #line default
+ #line hidden
+WriteLiteral(" , ");
+
+
+ #line 11 "..\..\Views\Shared\DisplayTemplates\Members.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+
+ #line 12 "..\..\Views\Shared\DisplayTemplates\Members.cshtml"
+Write(Html.ActionLink(item, "Detail", controller, new { name = item }, null));
+
+
+ #line default
+ #line hidden
+
+ #line 12 "..\..\Views\Shared\DisplayTemplates\Members.cshtml"
+
+}
+
+ #line default
+ #line hidden
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Shared/DisplayTemplates/YesNo.cshtml b/GitCandy.Web/Views/Shared/DisplayTemplates/YesNo.cshtml
new file mode 100644
index 0000000..dd3212d
--- /dev/null
+++ b/GitCandy.Web/Views/Shared/DisplayTemplates/YesNo.cshtml
@@ -0,0 +1,3 @@
+@model bool
+
+@(Model ? SR.Shared_Yes : SR.Shared_No)
\ No newline at end of file
diff --git a/GitCandy.Web/Views/Shared/DisplayTemplates/YesNo.generated.cs b/GitCandy.Web/Views/Shared/DisplayTemplates/YesNo.generated.cs
new file mode 100644
index 0000000..d10e838
--- /dev/null
+++ b/GitCandy.Web/Views/Shared/DisplayTemplates/YesNo.generated.cs
@@ -0,0 +1,62 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Shared/DisplayTemplates/YesNo.cshtml")]
+ public partial class _Views_Shared_DisplayTemplates_YesNo_cshtml_ : System.Web.Mvc.WebViewPage<bool>
+ {
+ public _Views_Shared_DisplayTemplates_YesNo_cshtml_()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 3 "..\..\Views\Shared\DisplayTemplates\YesNo.cshtml"
+Write(Model ? SR.Shared_Yes : SR.Shared_No);
+
+
+ #line default
+ #line hidden
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Shared/Error.cshtml b/GitCandy.Web/Views/Shared/Error.cshtml
new file mode 100644
index 0000000..b4a1239
--- /dev/null
+++ b/GitCandy.Web/Views/Shared/Error.cshtml
@@ -0,0 +1,17 @@
+@{
+ Layout = null;
+}
+
+<!DOCTYPE html>
+<html>
+<head>
+ <meta name="viewport" content="width=device-width" />
+ <title>Error</title>
+</head>
+<body>
+ <hgroup>
+ <h1>Error.</h1>
+ <h2>An error occurred while processing your request.</h2>
+ </hgroup>
+</body>
+</html>
\ No newline at end of file
diff --git a/GitCandy.Web/Views/Shared/Error.generated.cs b/GitCandy.Web/Views/Shared/Error.generated.cs
new file mode 100644
index 0000000..60ab1ab
--- /dev/null
+++ b/GitCandy.Web/Views/Shared/Error.generated.cs
@@ -0,0 +1,73 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Shared/Error.cshtml")]
+ public partial class _Views_Shared_Error_cshtml : System.Web.Mvc.WebViewPage<dynamic>
+ {
+ public _Views_Shared_Error_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 1 "..\..\Views\Shared\Error.cshtml"
+
+ Layout = null;
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n <meta");
+
+WriteLiteral(" name=\"viewport\"");
+
+WriteLiteral(" content=\"width=device-width\"");
+
+WriteLiteral(" />\r\n <title>Error</title>\r\n</head>\r\n<body>\r\n <hgroup>\r\n <h1>Error.<" +
+"/h1>\r\n <h2>An error occurred while processing your request.</h2>\r\n </h" +
+"group>\r\n</body>\r\n</html>");
+
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Team/Create.cshtml b/GitCandy.Web/Views/Team/Create.cshtml
new file mode 100644
index 0000000..655fe63
--- /dev/null
+++ b/GitCandy.Web/Views/Team/Create.cshtml
@@ -0,0 +1,45 @@
+@model GitCandy.Models.TeamModel
+
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, SR.Team_CreationTitle);
+}
+
+<h3>@SR.Team_CreationTitle</h3>
+
+@using (Html.BeginForm("Create", "Team", FormMethod.Post))
+{
+ <dl class="dl-horizontal col-md-8">
+ <dt>@Html.DisplayNameFor(s => s.Name)</dt>
+ <dd>@Html.TextBoxFor(s => s.Name, new { @class = "form-control" })</dd>
+ <dd>
+ <span class="text-danger">
+ @Html.ValidationMessageFor(s => s.Name)
+ </span>
+ </dd>
+
+ <dt>@Html.DisplayNameFor(s => s.Nickname)</dt>
+ <dd>@Html.TextBoxFor(s => s.Nickname, new { @class = "form-control" })</dd>
+ <dd>
+ <span class="text-danger">
+ @Html.ValidationMessageFor(s => s.Nickname)
+ </span>
+ </dd>
+
+ <dt>@Html.DisplayNameFor(s => s.Description)</dt>
+ <dd>@Html.TextAreaFor(s => s.Description, 4, 0, new { @class = "form-control" })</dd>
+ <dd>
+ <span class="text-danger">
+ @Html.ValidationMessageFor(s => s.Description)
+ </span>
+ </dd>
+
+ <dt></dt>
+ <dd>@Html.ValidationSummary(true, SR.Team_CreationUnsuccessfull, new { @class = "alert alert-dismissable alert-danger" })</dd>
+
+ <dt></dt>
+ <dd>
+ <button type="submit" class="btn btn-primary">@SR.Shared_Create</button>
+ <button type="reset" class="btn btn-inverse">@SR.Shared_Reset</button>
+ </dd>
+ </dl>
+}
diff --git a/GitCandy.Web/Views/Team/Create.generated.cs b/GitCandy.Web/Views/Team/Create.generated.cs
new file mode 100644
index 0000000..cdc89f5
--- /dev/null
+++ b/GitCandy.Web/Views/Team/Create.generated.cs
@@ -0,0 +1,233 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Team/Create.cshtml")]
+ public partial class _Views_Team_Create_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.TeamModel>
+ {
+ public _Views_Team_Create_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 3 "..\..\Views\Team\Create.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, SR.Team_CreationTitle);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<h3>");
+
+
+ #line 7 "..\..\Views\Team\Create.cshtml"
+Write(SR.Team_CreationTitle);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h3>\r\n\r\n");
+
+
+ #line 9 "..\..\Views\Team\Create.cshtml"
+ using (Html.BeginForm("Create", "Team", FormMethod.Post))
+{
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <dl");
+
+WriteLiteral(" class=\"dl-horizontal col-md-8\"");
+
+WriteLiteral(">\r\n <dt>");
+
+
+ #line 12 "..\..\Views\Team\Create.cshtml"
+ Write(Html.DisplayNameFor(s => s.Name));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 13 "..\..\Views\Team\Create.cshtml"
+ Write(Html.TextBoxFor(s => s.Name, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n <dd>\r\n <span");
+
+WriteLiteral(" class=\"text-danger\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 16 "..\..\Views\Team\Create.cshtml"
+ Write(Html.ValidationMessageFor(s => s.Name));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </span>\r\n </dd>\r\n\r\n <dt>");
+
+
+ #line 20 "..\..\Views\Team\Create.cshtml"
+ Write(Html.DisplayNameFor(s => s.Nickname));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 21 "..\..\Views\Team\Create.cshtml"
+ Write(Html.TextBoxFor(s => s.Nickname, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n <dd>\r\n <span");
+
+WriteLiteral(" class=\"text-danger\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 24 "..\..\Views\Team\Create.cshtml"
+ Write(Html.ValidationMessageFor(s => s.Nickname));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </span>\r\n </dd>\r\n\r\n <dt>");
+
+
+ #line 28 "..\..\Views\Team\Create.cshtml"
+ Write(Html.DisplayNameFor(s => s.Description));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 29 "..\..\Views\Team\Create.cshtml"
+ Write(Html.TextAreaFor(s => s.Description, 4, 0, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n <dd>\r\n <span");
+
+WriteLiteral(" class=\"text-danger\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 32 "..\..\Views\Team\Create.cshtml"
+ Write(Html.ValidationMessageFor(s => s.Description));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </span>\r\n </dd>\r\n\r\n <dt></dt>\r\n <dd>");
+
+
+ #line 37 "..\..\Views\Team\Create.cshtml"
+ Write(Html.ValidationSummary(true, SR.Team_CreationUnsuccessfull, new { @class = "alert alert-dismissable alert-danger" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt></dt>\r\n <dd>\r\n <button");
+
+WriteLiteral(" type=\"submit\"");
+
+WriteLiteral(" class=\"btn btn-primary\"");
+
+WriteLiteral(">");
+
+
+ #line 41 "..\..\Views\Team\Create.cshtml"
+ Write(SR.Shared_Create);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</button> \r\n <button");
+
+WriteLiteral(" type=\"reset\"");
+
+WriteLiteral(" class=\"btn btn-inverse\"");
+
+WriteLiteral(">");
+
+
+ #line 42 "..\..\Views\Team\Create.cshtml"
+ Write(SR.Shared_Reset);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</button> \r\n </dd>\r\n </dl>\r\n");
+
+
+ #line 45 "..\..\Views\Team\Create.cshtml"
+}
+
+
+ #line default
+ #line hidden
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Team/Delete.cshtml b/GitCandy.Web/Views/Team/Delete.cshtml
new file mode 100644
index 0000000..0461185
--- /dev/null
+++ b/GitCandy.Web/Views/Team/Delete.cshtml
@@ -0,0 +1,23 @@
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Team_DeleteTitle, Model));
+}
+
+<div class="panel panel-danger">
+ <div class="panel-heading">
+ <h4 class="panel-title">@SR.Shared_Conform</h4>
+ </div>
+ <div class="panel-body">
+ @String.Format(SR.Team_DeletionWords, Model)
+ </div>
+</div>
+
+@Html.ValidationSummary(true, "", new { @class = "alert alert-error" })
+
+<div>
+ <div class="pull-left">
+ @Html.ActionLink(SR.Shared_Back, "Detail", "Team", new { name = Model }, new { @class = "btn btn-default" })
+ </div>
+ <div class="pull-right">
+ @Html.ActionLink(SR.Shared_Delete, "Delete", "Team", new { name = Model, Conform = "Yes" }, new { @class = "btn btn-danger" })
+ </div>
+</div>
diff --git a/GitCandy.Web/Views/Team/Delete.generated.cs b/GitCandy.Web/Views/Team/Delete.generated.cs
new file mode 100644
index 0000000..fa2ffec
--- /dev/null
+++ b/GitCandy.Web/Views/Team/Delete.generated.cs
@@ -0,0 +1,140 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Team/Delete.cshtml")]
+ public partial class _Views_Team_Delete_cshtml : System.Web.Mvc.WebViewPage<dynamic>
+ {
+ public _Views_Team_Delete_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 1 "..\..\Views\Team\Delete.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Team_DeleteTitle, Model));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<div");
+
+WriteLiteral(" class=\"panel panel-danger\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"panel-heading\"");
+
+WriteLiteral(">\r\n <h4");
+
+WriteLiteral(" class=\"panel-title\"");
+
+WriteLiteral(">");
+
+
+ #line 7 "..\..\Views\Team\Delete.cshtml"
+ Write(SR.Shared_Conform);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h4>\r\n </div>\r\n <div");
+
+WriteLiteral(" class=\"panel-body\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 10 "..\..\Views\Team\Delete.cshtml"
+ Write(String.Format(SR.Team_DeletionWords, Model));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n</div>\r\n\r\n");
+
+
+ #line 14 "..\..\Views\Team\Delete.cshtml"
+Write(Html.ValidationSummary(true, "", new { @class = "alert alert-error" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<div>\r\n <div");
+
+WriteLiteral(" class=\"pull-left\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 18 "..\..\Views\Team\Delete.cshtml"
+ Write(Html.ActionLink(SR.Shared_Back, "Detail", "Team", new { name = Model }, new { @class = "btn btn-default" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n <div");
+
+WriteLiteral(" class=\"pull-right\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 21 "..\..\Views\Team\Delete.cshtml"
+ Write(Html.ActionLink(SR.Shared_Delete, "Delete", "Team", new { name = Model, Conform = "Yes" }, new { @class = "btn btn-danger" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </div>\r\n</div>\r\n");
+
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Team/Detail.cshtml b/GitCandy.Web/Views/Team/Detail.cshtml
new file mode 100644
index 0000000..5ac9443
--- /dev/null
+++ b/GitCandy.Web/Views/Team/Detail.cshtml
@@ -0,0 +1,39 @@
+@model GitCandy.Models.TeamModel
+
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Team_DetailTitle, Model.Name));
+ var token = GitCandy.Security.Token.Current;
+}
+
+<h3>@String.Format(SR.Team_DetailTitle, Model.Name)</h3>
+
+
+@if (Model != null)
+{
+ <dl class="dl-horizontal">
+
+ <dt>@Html.DisplayNameFor(s => s.Name)</dt>
+ <dd>@Model.Name</dd>
+
+ <dt>@Html.DisplayNameFor(s => s.Nickname)</dt>
+ <dd>@Model.Nickname</dd>
+
+ <dt>@Html.DisplayNameFor(s => s.Members)</dt>
+ <dd>@Html.DisplayFor(s => s.Members)</dd>
+
+ <dt>@Html.DisplayNameFor(s => s.Repositories)</dt>
+ <dd>@Html.DisplayFor(s => s.Repositories)</dd>
+
+ <dt>@Html.DisplayNameFor(s => s.Description)</dt>
+ <dd>@Model.Description</dd>
+
+ @if (token != null && token.IsSystemAdministrator)
+ {
+ <dt></dt>
+ <dd>
+ @Html.ActionLink(SR.Shared_Edit, "Edit", new { name = Model.Name }, new { @class = "btn btn-primary" })
+ @Html.ActionLink(SR.Team_Members, "Users", new { name = Model.Name }, new { @class = "btn btn-info" })
+ </dd>
+ }
+ </dl>
+}
diff --git a/GitCandy.Web/Views/Team/Detail.generated.cs b/GitCandy.Web/Views/Team/Detail.generated.cs
new file mode 100644
index 0000000..b86eb1c
--- /dev/null
+++ b/GitCandy.Web/Views/Team/Detail.generated.cs
@@ -0,0 +1,235 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Team/Detail.cshtml")]
+ public partial class _Views_Team_Detail_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.TeamModel>
+ {
+ public _Views_Team_Detail_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 3 "..\..\Views\Team\Detail.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Team_DetailTitle, Model.Name));
+ var token = GitCandy.Security.Token.Current;
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<h3>");
+
+
+ #line 8 "..\..\Views\Team\Detail.cshtml"
+Write(String.Format(SR.Team_DetailTitle, Model.Name));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h3>\r\n\r\n\r\n");
+
+
+ #line 11 "..\..\Views\Team\Detail.cshtml"
+ if (Model != null)
+{
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <dl");
+
+WriteLiteral(" class=\"dl-horizontal\"");
+
+WriteLiteral(">\r\n\r\n <dt>");
+
+
+ #line 15 "..\..\Views\Team\Detail.cshtml"
+ Write(Html.DisplayNameFor(s => s.Name));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 16 "..\..\Views\Team\Detail.cshtml"
+ Write(Model.Name);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt>");
+
+
+ #line 18 "..\..\Views\Team\Detail.cshtml"
+ Write(Html.DisplayNameFor(s => s.Nickname));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 19 "..\..\Views\Team\Detail.cshtml"
+ Write(Model.Nickname);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt>");
+
+
+ #line 21 "..\..\Views\Team\Detail.cshtml"
+ Write(Html.DisplayNameFor(s => s.Members));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 22 "..\..\Views\Team\Detail.cshtml"
+ Write(Html.DisplayFor(s => s.Members));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt>");
+
+
+ #line 24 "..\..\Views\Team\Detail.cshtml"
+ Write(Html.DisplayNameFor(s => s.Repositories));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 25 "..\..\Views\Team\Detail.cshtml"
+ Write(Html.DisplayFor(s => s.Repositories));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt>");
+
+
+ #line 27 "..\..\Views\Team\Detail.cshtml"
+ Write(Html.DisplayNameFor(s => s.Description));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 28 "..\..\Views\Team\Detail.cshtml"
+ Write(Model.Description);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n");
+
+
+ #line 30 "..\..\Views\Team\Detail.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 30 "..\..\Views\Team\Detail.cshtml"
+ if (token != null && token.IsSystemAdministrator)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <dt></dt>\r\n");
+
+WriteLiteral(" <dd>\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 34 "..\..\Views\Team\Detail.cshtml"
+ Write(Html.ActionLink(SR.Shared_Edit, "Edit", new { name = Model.Name }, new { @class = "btn btn-primary" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 35 "..\..\Views\Team\Detail.cshtml"
+ Write(Html.ActionLink(SR.Team_Members, "Users", new { name = Model.Name }, new { @class = "btn btn-info" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </dd>\r\n");
+
+
+ #line 37 "..\..\Views\Team\Detail.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" </dl>\r\n");
+
+
+ #line 39 "..\..\Views\Team\Detail.cshtml"
+}
+
+
+ #line default
+ #line hidden
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Team/Edit.cshtml b/GitCandy.Web/Views/Team/Edit.cshtml
new file mode 100644
index 0000000..cf5181d
--- /dev/null
+++ b/GitCandy.Web/Views/Team/Edit.cshtml
@@ -0,0 +1,51 @@
+@model GitCandy.Models.TeamModel
+
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Team_EditTitle, Model.Name));
+ var token = GitCandy.Security.Token.Current;
+}
+
+<h3>@String.Format(SR.Team_EditTitle, Model.Name)</h3>
+
+
+@using (Html.BeginForm("Edit", "Team", FormMethod.Post))
+{
+ <dl class="dl-horizontal col-md-8">
+ <dt>@Html.DisplayNameFor(s => s.Name)</dt>
+ <dd>
+ @Html.HiddenFor(s => s.Name)
+ @Model.Name
+ </dd>
+
+ <dt>@Html.DisplayNameFor(s => s.Nickname)</dt>
+ <dd>@Html.TextBoxFor(s => s.Nickname, new { @class = "form-control" })</dd>
+ <dd>
+ <span class="text-danger">
+ @Html.ValidationMessageFor(s => s.Nickname)
+ </span>
+ </dd>
+
+ <dt>@Html.DisplayNameFor(s => s.Description)</dt>
+ <dd>@Html.TextAreaFor(s => s.Description, 4, 0, new { @class = "form-control" })</dd>
+ <dd>
+ <span class="text-danger">
+ @Html.ValidationMessageFor(s => s.Description)
+ </span>
+ </dd>
+
+ <dt></dt>
+ <dd>@Html.ValidationSummary(true, SR.Team_UpdateUnsuccessfull, new { @class = "alert alert-dismissable alert-danger" })</dd>
+
+ <dt>
+ @Html.ActionLink(SR.Shared_Back, "Detail", new { Model.Name }, new { @class = "btn btn-default pull-left" })
+ </dt>
+ <dd>
+ <button type="submit" class="btn btn-primary">@SR.Shared_Save</button>
+ <button type="reset" class="btn btn-inverse">@SR.Shared_Reset</button>
+ @if (token != null && token.IsSystemAdministrator)
+ {
+ @Html.ActionLink(SR.Shared_Delete, "Delete", new { Model.Name }, new { @class = "btn btn-danger" })
+ }
+ </dd>
+ </dl>
+}
diff --git a/GitCandy.Web/Views/Team/Edit.generated.cs b/GitCandy.Web/Views/Team/Edit.generated.cs
new file mode 100644
index 0000000..6c9205d
--- /dev/null
+++ b/GitCandy.Web/Views/Team/Edit.generated.cs
@@ -0,0 +1,274 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Team/Edit.cshtml")]
+ public partial class _Views_Team_Edit_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.TeamModel>
+ {
+ public _Views_Team_Edit_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 3 "..\..\Views\Team\Edit.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Team_EditTitle, Model.Name));
+ var token = GitCandy.Security.Token.Current;
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<h3>");
+
+
+ #line 8 "..\..\Views\Team\Edit.cshtml"
+Write(String.Format(SR.Team_EditTitle, Model.Name));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h3>\r\n\r\n\r\n");
+
+
+ #line 11 "..\..\Views\Team\Edit.cshtml"
+ using (Html.BeginForm("Edit", "Team", FormMethod.Post))
+{
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <dl");
+
+WriteLiteral(" class=\"dl-horizontal col-md-8\"");
+
+WriteLiteral(">\r\n <dt>");
+
+
+ #line 14 "..\..\Views\Team\Edit.cshtml"
+ Write(Html.DisplayNameFor(s => s.Name));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 16 "..\..\Views\Team\Edit.cshtml"
+ Write(Html.HiddenFor(s => s.Name));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 17 "..\..\Views\Team\Edit.cshtml"
+ Write(Model.Name);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </dd>\r\n\r\n <dt>");
+
+
+ #line 20 "..\..\Views\Team\Edit.cshtml"
+ Write(Html.DisplayNameFor(s => s.Nickname));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 21 "..\..\Views\Team\Edit.cshtml"
+ Write(Html.TextBoxFor(s => s.Nickname, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n <dd>\r\n <span");
+
+WriteLiteral(" class=\"text-danger\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 24 "..\..\Views\Team\Edit.cshtml"
+ Write(Html.ValidationMessageFor(s => s.Nickname));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </span>\r\n </dd>\r\n\r\n <dt>");
+
+
+ #line 28 "..\..\Views\Team\Edit.cshtml"
+ Write(Html.DisplayNameFor(s => s.Description));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dt>\r\n <dd>");
+
+
+ #line 29 "..\..\Views\Team\Edit.cshtml"
+ Write(Html.TextAreaFor(s => s.Description, 4, 0, new { @class = "form-control" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n <dd>\r\n <span");
+
+WriteLiteral(" class=\"text-danger\"");
+
+WriteLiteral(">\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 32 "..\..\Views\Team\Edit.cshtml"
+ Write(Html.ValidationMessageFor(s => s.Description));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </span>\r\n </dd>\r\n\r\n <dt></dt>\r\n <dd>");
+
+
+ #line 37 "..\..\Views\Team\Edit.cshtml"
+ Write(Html.ValidationSummary(true, SR.Team_UpdateUnsuccessfull, new { @class = "alert alert-dismissable alert-danger" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</dd>\r\n\r\n <dt>\r\n");
+
+WriteLiteral(" ");
+
+
+ #line 40 "..\..\Views\Team\Edit.cshtml"
+ Write(Html.ActionLink(SR.Shared_Back, "Detail", new { Model.Name }, new { @class = "btn btn-default pull-left" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n </dt>\r\n <dd>\r\n <button");
+
+WriteLiteral(" type=\"submit\"");
+
+WriteLiteral(" class=\"btn btn-primary\"");
+
+WriteLiteral(">");
+
+
+ #line 43 "..\..\Views\Team\Edit.cshtml"
+ Write(SR.Shared_Save);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</button> \r\n <button");
+
+WriteLiteral(" type=\"reset\"");
+
+WriteLiteral(" class=\"btn btn-inverse\"");
+
+WriteLiteral(">");
+
+
+ #line 44 "..\..\Views\Team\Edit.cshtml"
+ Write(SR.Shared_Reset);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</button> \r\n");
+
+
+ #line 45 "..\..\Views\Team\Edit.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 45 "..\..\Views\Team\Edit.cshtml"
+ if (token != null && token.IsSystemAdministrator)
+ {
+
+
+ #line default
+ #line hidden
+
+ #line 47 "..\..\Views\Team\Edit.cshtml"
+ Write(Html.ActionLink(SR.Shared_Delete, "Delete", new { Model.Name }, new { @class = "btn btn-danger" }));
+
+
+ #line default
+ #line hidden
+
+ #line 47 "..\..\Views\Team\Edit.cshtml"
+
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" </dd>\r\n </dl>\r\n");
+
+
+ #line 51 "..\..\Views\Team\Edit.cshtml"
+}
+
+
+ #line default
+ #line hidden
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Team/Index.cshtml b/GitCandy.Web/Views/Team/Index.cshtml
new file mode 100644
index 0000000..56b28da
--- /dev/null
+++ b/GitCandy.Web/Views/Team/Index.cshtml
@@ -0,0 +1,46 @@
+@model GitCandy.Models.TeamListModel
+
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, SR.Team_ListTitle);
+}
+
+<h3>@SR.Team_ListTitle</h3>
+
+@using (Html.BeginForm("Index", "Team", FormMethod.Get))
+{
+<div class="row">
+ <div class="form-group col-md-5">
+ <div class="input-group">
+ <input type="text" name="query" class="form-control" />
+ <span class="input-group-btn">
+ <button type="submit" class="btn btn-default">@SR.Shared_Search</button>
+ </span>
+ </div>
+ </div>
+</div>
+}
+
+<div>
+ <div class="pull-left">@String.Format(SR.Team_TeamsFound, Model.ItemCount)</div>
+ <div class="pull-right">@Html.ActionLink(SR.Shared_Create, "Create", null, new { @class = "btn btn-primary" })</div>
+</div>
+<table class="table table-hover table-striped">
+ <thead>
+ <tr>
+ <th>@SR.Team_Name</th>
+ <th>@SR.Team_Name</th>
+ <th>@SR.Team_Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ @foreach (var item in Model.Teams)
+ {
+ <tr>
+ <td>@Html.ActionLink(item.Name, "Detail", new { name = item.Name })</td>
+ <td>@item.Nickname</td>
+ <td>@item.Description</td>
+ </tr>
+ }
+ </tbody>
+</table>
+@Html.Partial("_Pager")
\ No newline at end of file
diff --git a/GitCandy.Web/Views/Team/Index.generated.cs b/GitCandy.Web/Views/Team/Index.generated.cs
new file mode 100644
index 0000000..324f457
--- /dev/null
+++ b/GitCandy.Web/Views/Team/Index.generated.cs
@@ -0,0 +1,248 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+ using NewLife.Serialization;
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Team/Index.cshtml")]
+ public partial class _Views_Team_Index_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.TeamListModel>
+ {
+ public _Views_Team_Index_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+
+ #line 3 "..\..\Views\Team\Index.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, SR.Team_ListTitle);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<h3>");
+
+
+ #line 7 "..\..\Views\Team\Index.cshtml"
+Write(SR.Team_ListTitle);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h3>\r\n\r\n");
+
+
+ #line 9 "..\..\Views\Team\Index.cshtml"
+ using (Html.BeginForm("Index", "Team", FormMethod.Get))
+{
+
+
+ #line default
+ #line hidden
+WriteLiteral("<div");
+
+WriteLiteral(" class=\"row\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"form-group col-md-5\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"input-group\"");
+
+WriteLiteral(">\r\n <input");
+
+WriteLiteral(" type=\"text\"");
+
+WriteLiteral(" name=\"query\"");
+
+WriteLiteral(" class=\"form-control\"");
+
+WriteLiteral(" />\r\n <span");
+
+WriteLiteral(" class=\"input-group-btn\"");
+
+WriteLiteral(">\r\n <button");
+
+WriteLiteral(" type=\"submit\"");
+
+WriteLiteral(" class=\"btn btn-default\"");
+
+WriteLiteral(">");
+
+
+ #line 16 "..\..\Views\Team\Index.cshtml"
+ Write(SR.Shared_Search);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</button>\r\n </span>\r\n </div>\r\n </div>\r\n</div>\r\n");
+
+
+ #line 21 "..\..\Views\Team\Index.cshtml"
+}
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n<div>\r\n <div");
+
+WriteLiteral(" class=\"pull-left\"");
+
+WriteLiteral(">");
+
+
+ #line 24 "..\..\Views\Team\Index.cshtml"
+ Write(String.Format(SR.Team_TeamsFound, Model.ItemCount));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n <div");
+
+WriteLiteral(" class=\"pull-right\"");
+
+WriteLiteral(">");
+
+
+ #line 25 "..\..\Views\Team\Index.cshtml"
+ Write(Html.ActionLink(SR.Shared_Create, "Create", null, new { @class = "btn btn-primary" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</div>\r\n</div>\r\n<table");
+
+WriteLiteral(" class=\"table table-hover table-striped\"");
+
+WriteLiteral(">\r\n <thead>\r\n <tr>\r\n <th>");
+
+
+ #line 30 "..\..\Views\Team\Index.cshtml"
+ Write(SR.Team_Name);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</th>\r\n <th>");
+
+
+ #line 31 "..\..\Views\Team\Index.cshtml"
+ Write(SR.Team_Name);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</th>\r\n <th>");
+
+
+ #line 32 "..\..\Views\Team\Index.cshtml"
+ Write(SR.Team_Description);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n");
+
+
+ #line 36 "..\..\Views\Team\Index.cshtml"
+
+
+ #line default
+ #line hidden
+
+ #line 36 "..\..\Views\Team\Index.cshtml"
+ foreach (var item in Model.Teams)
+ {
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <tr>\r\n <td>");
+
+
+ #line 39 "..\..\Views\Team\Index.cshtml"
+ Write(Html.ActionLink(item.Name, "Detail", new { name = item.Name }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td>\r\n <td>");
+
+
+ #line 40 "..\..\Views\Team\Index.cshtml"
+ Write(item.Nickname);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td>\r\n <td>");
+
+
+ #line 41 "..\..\Views\Team\Index.cshtml"
+ Write(item.Description);
+
+
+ #line default
+ #line hidden
+WriteLiteral("</td>\r\n </tr>\r\n");
+
+
+ #line 43 "..\..\Views\Team\Index.cshtml"
+ }
+
+
+ #line default
+ #line hidden
+WriteLiteral(" </tbody>\r\n</table>\r\n");
+
+
+ #line 46 "..\..\Views\Team\Index.cshtml"
+Write(Html.Partial("_Pager"));
+
+
+ #line default
+ #line hidden
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Team/Users.cshtml b/GitCandy.Web/Views/Team/Users.cshtml
new file mode 100644
index 0000000..3e5e2d1
--- /dev/null
+++ b/GitCandy.Web/Views/Team/Users.cshtml
@@ -0,0 +1,42 @@
+@model GitCandy.Models.TeamModel
+@using NewLife.Serialization;
+
+@{
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Team_ChooseUserTitle, Model.Name));
+}
+
+<h4>@String.Format(SR.Team_ChooseUserTitle, Model.Name)</h4>
+
+@if (Model != null)
+{
+ <div class="row">
+ <div class="col-md-6">
+ <div id="chooser"></div>
+ </div>
+ </div>
+
+ <script type="text/javascript">
+ var team = "@Model.Name";
+ var chooser_params = [];
+ chooser_params.push(
+ {
+ data: @Html.Raw(Model.MembersRole.ToJson()),
+ controller: "Account",
+ container: "#chooser",
+ add_label: "@SR.Shared_Add",
+ del_label: "@SR.Shared_Remove",
+ add_action: { url: "@Url.Action("ChooseUser","Team")", query: function (item) { return { name: team, user: item, act: "add" }; } },
+ del_action: { url: "@Url.Action("ChooseUser","Team")", query: function (item) { return { name: team, user: item, act: "del" }; } },
+ action_array: [
+ {
+ key: "IsAdministrator",
+ on_label: "@SR.Team_ShortAdministrator",
+ off_label: "@SR.Team_ShortNonAdministrator",
+ checked: { url: "@Url.Action("ChooseUser","Team")", query: function (item) { return { name: team, user: item, act: "admin" }; } },
+ unchecked: { url: "@Url.Action("ChooseUser","Team")", query: function (item) { return { name: team, user: item, act: "member" }; } },
+ }
+ ]
+ });
+ </script>
+}
+@Html.ActionLink(SR.Shared_Back, "Detail", new { Model.Name }, new { @class = "btn btn-default" })
diff --git a/GitCandy.Web/Views/Team/Users.generated.cs b/GitCandy.Web/Views/Team/Users.generated.cs
new file mode 100644
index 0000000..dbdaf29
--- /dev/null
+++ b/GitCandy.Web/Views/Team/Users.generated.cs
@@ -0,0 +1,229 @@
+#pragma warning disable 1591
+//------------------------------------------------------------------------------
+// <auto-generated>
+// 此代码由工具生成。
+// 运行时版本:4.0.30319.42000
+//
+// 对此文件的更改可能会导致不正确的行为,并且如果
+// 重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace ASP
+{
+ using System;
+ using System.Collections.Generic;
+ using System.IO;
+ using System.Linq;
+ using System.Net;
+ using System.Text;
+ using System.Web;
+ using System.Web.Helpers;
+ using System.Web.Mvc;
+ using System.Web.Mvc.Ajax;
+ using System.Web.Mvc.Html;
+ using System.Web.Routing;
+ using System.Web.Security;
+ using System.Web.UI;
+ using System.Web.WebPages;
+ using GitCandy;
+ using GitCandy.App_GlobalResources;
+ using GitCandy.Base;
+ using GitCandy.Configuration;
+ using GitCandy.Extensions;
+ using GitCandy.Models;
+ using NewLife;
+ using NewLife.Cube;
+ using NewLife.Reflection;
+
+ #line 2 "..\..\Views\Team\Users.cshtml"
+ using NewLife.Serialization;
+
+ #line default
+ #line hidden
+ using NewLife.Web;
+ using XCode;
+ using XCode.Membership;
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
+ [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Team/Users.cshtml")]
+ public partial class _Views_Team_Users_cshtml : System.Web.Mvc.WebViewPage<GitCandy.Models.TeamModel>
+ {
+ public _Views_Team_Users_cshtml()
+ {
+ }
+ public override void Execute()
+ {
+WriteLiteral("\r\n");
+
+
+ #line 4 "..\..\Views\Team\Users.cshtml"
+
+ ViewBag.Title = String.Format(SR.Shared_TitleFormat, String.Format(SR.Team_ChooseUserTitle, Model.Name));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n\r\n<h4>");
+
+
+ #line 8 "..\..\Views\Team\Users.cshtml"
+Write(String.Format(SR.Team_ChooseUserTitle, Model.Name));
+
+
+ #line default
+ #line hidden
+WriteLiteral("</h4>\r\n\r\n");
+
+
+ #line 10 "..\..\Views\Team\Users.cshtml"
+ if (Model != null)
+{
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <div");
+
+WriteLiteral(" class=\"row\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" class=\"col-md-6\"");
+
+WriteLiteral(">\r\n <div");
+
+WriteLiteral(" id=\"chooser\"");
+
+WriteLiteral("></div>\r\n </div>\r\n </div>\r\n");
+
+
+ #line 17 "..\..\Views\Team\Users.cshtml"
+
+
+
+ #line default
+ #line hidden
+WriteLiteral(" <script");
+
+WriteLiteral(" type=\"text/javascript\"");
+
+WriteLiteral(">\r\n var team = \"");
+
+
+ #line 19 "..\..\Views\Team\Users.cshtml"
+ Write(Model.Name);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\";\r\n var chooser_params = [];\r\n chooser_params.push(\r\n {" +
+"\r\n data: ");
+
+
+ #line 23 "..\..\Views\Team\Users.cshtml"
+ Write(Html.Raw(Model.MembersRole.ToJson()));
+
+
+ #line default
+ #line hidden
+WriteLiteral(",\r\n controller: \"Account\",\r\n container: \"#chooser\"," +
+"\r\n add_label: \"");
+
+
+ #line 26 "..\..\Views\Team\Users.cshtml"
+ Write(SR.Shared_Add);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\",\r\n del_label: \"");
+
+
+ #line 27 "..\..\Views\Team\Users.cshtml"
+ Write(SR.Shared_Remove);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\",\r\n add_action: { url: \"");
+
+
+ #line 28 "..\..\Views\Team\Users.cshtml"
+ Write(Url.Action("ChooseUser","Team"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\", query: function (item) { return { name: team, user: item, act: \"add\" }; } },\r\n" +
+" del_action: { url: \"");
+
+
+ #line 29 "..\..\Views\Team\Users.cshtml"
+ Write(Url.Action("ChooseUser","Team"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\", query: function (item) { return { name: team, user: item, act: \"del\" }; } },\r\n" +
+" action_array: [\r\n {\r\n " +
+"key: \"IsAdministrator\",\r\n on_label: \"");
+
+
+ #line 33 "..\..\Views\Team\Users.cshtml"
+ Write(SR.Team_ShortAdministrator);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\",\r\n off_label: \"");
+
+
+ #line 34 "..\..\Views\Team\Users.cshtml"
+ Write(SR.Team_ShortNonAdministrator);
+
+
+ #line default
+ #line hidden
+WriteLiteral("\",\r\n checked: { url: \"");
+
+
+ #line 35 "..\..\Views\Team\Users.cshtml"
+ Write(Url.Action("ChooseUser","Team"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\", query: function (item) { return { name: team, user: item, act: \"admin\" }; } }," +
+"\r\n unchecked: { url: \"");
+
+
+ #line 36 "..\..\Views\Team\Users.cshtml"
+ Write(Url.Action("ChooseUser","Team"));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\", query: function (item) { return { name: team, user: item, act: \"member\" }; } }" +
+",\r\n }\r\n ]\r\n });\r\n </script>\r\n");
+
+
+ #line 41 "..\..\Views\Team\Users.cshtml"
+}
+
+
+ #line default
+ #line hidden
+
+ #line 42 "..\..\Views\Team\Users.cshtml"
+Write(Html.ActionLink(SR.Shared_Back, "Detail", new { Model.Name }, new { @class = "btn btn-default" }));
+
+
+ #line default
+ #line hidden
+WriteLiteral("\r\n");
+
+ }
+ }
+}
+#pragma warning restore 1591
diff --git a/GitCandy.Web/Views/Web.config b/GitCandy.Web/Views/Web.config
new file mode 100644
index 0000000..a1cde25
--- /dev/null
+++ b/GitCandy.Web/Views/Web.config
@@ -0,0 +1,55 @@
+<?xml version="1.0"?>
+
+<configuration>
+ <configSections>
+ <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
+ <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
+ <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
+ </sectionGroup>
+ </configSections>
+
+ <system.web.webPages.razor>
+ <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
+ <pages pageBaseType="System.Web.Mvc.WebViewPage">
+ <namespaces>
+ <add namespace="System.Web.Mvc" />
+ <add namespace="System.Web.Mvc.Ajax" />
+ <add namespace="System.Web.Mvc.Html" />
+ <add namespace="System.Web.Routing" />
+ <add namespace="GitCandy.App_GlobalResources"/>
+ <add namespace="GitCandy"/>
+ <add namespace="GitCandy.Base"/>
+ <add namespace="GitCandy.Configuration"/>
+ <add namespace="GitCandy.Extensions"/>
+ <add namespace="GitCandy.Models"/>
+ <add namespace="NewLife"/>
+ <add namespace="NewLife.Cube" />
+ <add namespace="NewLife.Reflection" />
+ <add namespace="NewLife.Serialization" />
+ <add namespace="NewLife.Web" />
+ <add namespace="XCode" />
+ <add namespace="XCode.Membership" />
+ </namespaces>
+ </pages>
+ </system.web.webPages.razor>
+
+ <appSettings>
+ <add key="webpages:Enabled" value="false" />
+ </appSettings>
+
+ <system.webServer>
+ <validation validateIntegratedModeConfiguration="false" />
+
+ <handlers>
+ <remove name="BlockViewHandler"/>
+ <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
+ </handlers>
+ <security>
+ <requestFiltering>
+ <denyUrlSequences>
+ <add sequence="/" />
+ </denyUrlSequences>
+ </requestFiltering>
+ </security>
+ </system.webServer>
+</configuration>
diff --git a/GitCandy.Web/Web.config b/GitCandy.Web/Web.config
new file mode 100644
index 0000000..e4220ca
--- /dev/null
+++ b/GitCandy.Web/Web.config
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ For more information on how to configure your ASP.NET application, please visit
+ http://go.microsoft.com/fwlink/?LinkId=169433
+ -->
+<configuration>
+ <connectionStrings>
+ <add name="GitCandy" connectionString="Data Source=..\Data\GitCandy.db;" providerName="System.Data.SQLite" />
+ </connectionStrings>
+ <appSettings>
+ <add key="webpages:Version" value="3.0.0.0" />
+ <add key="webpages:Enabled" value="false" />
+ </appSettings>
+ <system.web>
+ <compilation debug="true" targetFramework="4.5" />
+ <httpRuntime targetFramework="4.5" maxRequestLength="4194304" requestPathInvalidCharacters="" executionTimeout="1800" />
+ <pages>
+ <namespaces>
+ <add namespace="System.Web.Helpers" />
+ <add namespace="System.Web.Mvc" />
+ <add namespace="System.Web.Mvc.Ajax" />
+ <add namespace="System.Web.Mvc.Html" />
+ <add namespace="System.Web.Routing" />
+ <add namespace="System.Web.WebPages" />
+ </namespaces>
+ </pages>
+ </system.web>
+ <system.webServer>
+ <modules runAllManagedModulesForAllRequests="true">
+ <!--全局错误处理模块-->
+ <add name="ErrorModule" type="NewLife.Web.ErrorModule,NewLife.Core" />
+ </modules>
+ <httpProtocol>
+ <customHeaders>
+ <remove name="X-Powered-By" />
+ <add name="X-Powered-By" value="NewLife.Cube http://www.NewLifeX.com" />
+ </customHeaders>
+ </httpProtocol>
+ <!--静态缓存使用浏览器缓存,超时时间之内不发出Http请求(F5除外)-->
+ <staticContent>
+ <remove fileExtension=".woff" />
+ <remove fileExtension=".woff2" />
+ <mimeMap fileExtension=".woff" mimeType="application/x-font-woff" />
+ <mimeMap fileExtension=".woff2" mimeType="application/x-font-woff" />
+ <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="240:00:00" />
+ </staticContent>
+ <security>
+ <requestFiltering allowDoubleEscaping="true">
+ <requestLimits maxAllowedContentLength="134217728" />
+ <fileExtensions allowUnlisted="true">
+ <clear />
+ </fileExtensions>
+ <hiddenSegments>
+ <clear />
+ </hiddenSegments>
+ </requestFiltering>
+ </security>
+ </system.webServer>
+ <runtime>
+ <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+ <dependentAssembly>
+ <assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" />
+ <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
+ <bindingRedirect oldVersion="0.0.0.0-1.6.5135.21930" newVersion="1.6.5135.21930" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
+ <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
+ <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
+ <bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="Antlr3.Runtime" publicKeyToken="eb42632606e9261f" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-3.5.0.2" newVersion="3.5.0.2" />
+ </dependentAssembly>
+ </assemblyBinding>
+ </runtime>
+</configuration>
\ No newline at end of file
diff --git a/GitCandy.Web/Web.Debug.config b/GitCandy.Web/Web.Debug.config
new file mode 100644
index 0000000..7568e42
--- /dev/null
+++ b/GitCandy.Web/Web.Debug.config
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->
+
+<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
+ <!--
+ In the example below, the "SetAttributes" transform will change the value of
+ "connectionString" to use "ReleaseSQLServer" only when the "Match" locator
+ finds an attribute "name" that has a value of "MyDB".
+
+ <connectionStrings>
+ <add name="MyDB"
+ connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
+ xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
+ </connectionStrings>
+ -->
+ <system.web>
+ <!--
+ In the example below, the "Replace" transform will replace the entire
+ <customErrors> section of your web.config file.
+ Note that because there is only one customErrors section under the
+ <system.web> node, there is no need to use the "xdt:Locator" attribute.
+
+ <customErrors defaultRedirect="GenericError.htm"
+ mode="RemoteOnly" xdt:Transform="Replace">
+ <error statusCode="500" redirect="InternalError.htm"/>
+ </customErrors>
+ -->
+ </system.web>
+</configuration>
\ No newline at end of file
diff --git a/GitCandy.Web/Web.Release.config b/GitCandy.Web/Web.Release.config
new file mode 100644
index 0000000..73b0f49
--- /dev/null
+++ b/GitCandy.Web/Web.Release.config
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->
+
+<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
+ <!--
+ In the example below, the "SetAttributes" transform will change the value of
+ "connectionString" to use "ReleaseSQLServer" only when the "Match" locator
+ finds an attribute "name" that has a value of "MyDB".
+
+ <connectionStrings>
+ <add name="MyDB"
+ connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
+ xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
+ </connectionStrings>
+ -->
+ <system.web>
+ <compilation xdt:Transform="RemoveAttributes(debug)" />
+ <!--
+ In the example below, the "Replace" transform will replace the entire
+ <customErrors> section of your web.config file.
+ Note that because there is only one customErrors section under the
+ <system.web> node, there is no need to use the "xdt:Locator" attribute.
+
+ <customErrors defaultRedirect="GenericError.htm"
+ mode="RemoteOnly" xdt:Transform="Replace">
+ <error statusCode="500" redirect="InternalError.htm"/>
+ </customErrors>
+ -->
+ </system.web>
+</configuration>
\ No newline at end of file
diff --git a/GitCandy/GitCandy.csproj b/GitCandy/GitCandy.csproj
index f6764d5..1377cf1 100644
--- a/GitCandy/GitCandy.csproj
+++ b/GitCandy/GitCandy.csproj
@@ -1,30 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="..\packages\LibGit2Sharp.NativeBinaries.1.0.129\build\LibGit2Sharp.NativeBinaries.props" Condition="Exists('..\packages\LibGit2Sharp.NativeBinaries.1.0.129\build\LibGit2Sharp.NativeBinaries.props')" />
+<Project ToolsVersion="14.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>
- <SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{8C65D667-BA60-4810-927A-F8AFB55D55FE}</ProjectGuid>
- <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>GitCandy</RootNamespace>
<AssemblyName>GitCandy</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
- <UseIISExpress>true</UseIISExpress>
- <IISExpressSSLPort />
- <IISExpressAnonymousAuthentication />
- <IISExpressWindowsAuthentication />
- <IISExpressUseClassicPipelineMode />
- <UseGlobalApplicationHostFile />
+ <FileAlignment>512</FileAlignment>
+ <NuGetPackageImportStamp>
+ </NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
- <OutputPath>bin\</OutputPath>
+ <OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
@@ -32,355 +26,46 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
- <OutputPath>bin\</OutputPath>
+ <OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
- <Reference Include="ICSharpCode.SharpZipLib">
- <HintPath>..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll</HintPath>
- </Reference>
- <Reference Include="LibGit2Sharp, Version=0.22.0.0, Culture=neutral, PublicKeyToken=7cbde695407f0333, processorArchitecture=MSIL">
- <HintPath>..\packages\LibGit2Sharp.0.22.0\lib\net40\LibGit2Sharp.dll</HintPath>
- <Private>True</Private>
- </Reference>
- <Reference Include="Microsoft.CSharp" />
- <Reference Include="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
- <Private>True</Private>
- <HintPath>..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
- </Reference>
<Reference Include="NewLife.Core">
<HintPath>..\DLL\NewLife.Core.dll</HintPath>
</Reference>
- <Reference Include="NewLife.Cube">
- <HintPath>..\DLL\NewLife.Cube.dll</HintPath>
- </Reference>
<Reference Include="System" />
<Reference Include="System.Configuration" />
- <Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Core" />
<Reference Include="System.Numerics" />
- <Reference Include="System.Security" />
- <Reference Include="System.Transactions" />
<Reference Include="System.Web" />
- <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.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.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.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
<Reference Include="XCode">
<HintPath>..\DLL\XCode.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
- <Content Include="Content\bootstrap-theme.css" />
- <Content Include="Content\bootstrap-theme.min.css" />
- <Content Include="Content\bootstrap.css" />
- <Content Include="Content\bootstrap.min.css" />
- <Content Include="Entity\GitCandy数据字典.htm" />
- <Content Include="fonts\glyphicons-halflings-regular.svg" />
- <Content Include="fonts\glyphicons-halflings-regular.woff2" />
- <Content Include="fonts\glyphicons-halflings-regular.woff" />
- <Content Include="fonts\glyphicons-halflings-regular.ttf" />
- <Content Include="fonts\glyphicons-halflings-regular.eot" />
- <Content Include="Content\bootstrap.min.css.map" />
- <Content Include="Content\bootstrap.css.map" />
- <Content Include="Content\bootstrap-theme.min.css.map" />
- <Content Include="Content\bootstrap-theme.css.map" />
- <Content Include="Areas\GitCandy\Views\web.config" />
- <Content Include="Entity\XCoder.log">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>XCoder.tt</DependentUpon>
- </Content>
- <None Include="packages.config">
- <SubType>Designer</SubType>
- </None>
- <None Include="Properties\PublishProfiles\GitCandy.pubxml" />
- <None Include="Scripts\jquery-2.0.3.intellisense.js" />
- <None Include="Scripts\_references.js" />
- <Content Include="Views\Shared\DisplayTemplates\Maps.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Maps.generated.cs</LastGenOutput>
- </Content>
- <None Include="Web.Debug.config">
- <DependentUpon>Web.config</DependentUpon>
- </None>
- <None Include="Web.Release.config">
- <DependentUpon>Web.config</DependentUpon>
- </None>
- </ItemGroup>
- <ItemGroup>
- <Content Include="Content\bootstrap-switch.css" />
- <Content Include="Content\highlight.css" />
- <Content Include="Content\Site.css" />
- <Content Include="Entity\NewLife.GitCandy.xml" />
- <Content Include="Entity\XCoder.tt">
- <Generator>TextTemplatingFileGenerator</Generator>
- <LastGenOutput>XCoder.log</LastGenOutput>
- </Content>
- <Content Include="Global.asax" />
- <Content Include="Scripts\bootstrap.js" />
- <Content Include="Scripts\bootstrap.min.js" />
- <Content Include="Scripts\bootstrap3-typeahead.js" />
- <Content Include="Scripts\bootstrap-switch.js" />
- <Content Include="Scripts\common.js" />
- <Content Include="Scripts\highlight.pack.js" />
- <Content Include="Scripts\jquery-2.0.3.js" />
- <Content Include="Scripts\marked.js" />
- <Content Include="Views\Account\Change.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Change.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Account\Create.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Create.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Account\Delete.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Delete.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Account\Detail.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Detail.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Account\Edit.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Edit.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Account\Forgot.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Forgot.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Account\Index.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Index.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Account\Login.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Login.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Account\Ssh.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Ssh.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Home\About.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>About.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Repository\Blame.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Blame.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Repository\Blob.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Blob.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Repository\Branches.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Branches.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Repository\Commit.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Commit.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Repository\Commits.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Commits.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Repository\Compare.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Compare.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Repository\Contributors.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Contributors.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Repository\Coop.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Coop.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Repository\Create.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Create.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Repository\Delete.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Delete.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Repository\Detail.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Detail.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Repository\Edit.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Edit.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Repository\Index.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Index.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Repository\Tags.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Tags.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Repository\Tree.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Tree.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Repository\_BlobPreview.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>_BlobPreview.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Repository\_BranchSelector.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>_BranchSelector.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Repository\_Diff.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>_Diff.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Repository\_GitUrlButton.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>_GitUrlButton.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Repository\_PathBar.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>_PathBar.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Repository\_ZipButton.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>_ZipButton.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Setting\Edit.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Edit.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Setting\ReGenSsh.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>ReGenSsh.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Setting\Restart.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Restart.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Shared\DisplayTemplates\Members.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Members.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Shared\DisplayTemplates\YesNo.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>YesNo.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Shared\Error.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Error.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Shared\_Layout.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>_Layout.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Shared\_Pager.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>_Pager.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Team\Create.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Create.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Team\Delete.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Delete.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Team\Detail.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Detail.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Team\Edit.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Edit.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Team\Index.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Index.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Team\Users.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>Users.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Views\Web.config" />
- <Content Include="Views\_ViewStart.cshtml">
- <Generator>RazorGenerator</Generator>
- <LastGenOutput>_ViewStart.generated.cs</LastGenOutput>
- </Content>
- <Content Include="Web.config" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="App_GlobalResources\SR.designer.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>SR.resx</DependentUpon>
- </Compile>
- <Compile Include="App_GlobalResources\SR.fr.Designer.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>SR.fr.resx</DependentUpon>
- </Compile>
- <Compile Include="App_GlobalResources\SR.zh-Hans.Designer.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>SR.zh-Hans.resx</DependentUpon>
- </Compile>
- <Compile Include="App_Start\AppInfomation.cs" />
- <Compile Include="App_Start\FilterConfig.cs" />
- <Compile Include="App_Start\RouteConfig.cs" />
- <Compile Include="App_Start\SshServerConfig.cs" />
- <Compile Include="Areas\GitCandy\Controllers\RepositoryController.cs" />
- <Compile Include="Areas\GitCandy\Controllers\AuthorizationLogController.cs" />
- <Compile Include="Areas\GitCandy\Controllers\SshKeyController.cs" />
- <Compile Include="Areas\GitCandy\Controllers\UserController.cs" />
- <Compile Include="Areas\GitCandy\Controllers\UserRepositoryController.cs" />
- <Compile Include="Areas\GitCandy\Controllers\UserTeamController.cs" />
- <Compile Include="Areas\GitCandy\Controllers\GitController.cs" />
- <Compile Include="Areas\GitCandy\GitCandyAreaRegistration.cs" />
<Compile Include="Base\FileHelper.cs" />
<Compile Include="Base\Pager.cs" />
<Compile Include="Base\Profiler.cs" />
- <Compile Include="Base\RawResult.cs" />
<Compile Include="Base\RegularExpression.cs" />
<Compile Include="Base\StringLogicalComparer.cs" />
+ <Compile Include="Configuration\ConfigurationEntry.cs" />
+ <Compile Include="Configuration\ConfigurationKeyAttribute.cs" />
+ <Compile Include="Configuration\GitCoreResloverAttribute.cs" />
<Compile Include="Configuration\HostKey.cs" />
+ <Compile Include="Configuration\HostKeyResloverAttribute.cs" />
+ <Compile Include="Configuration\RecommendedValueAttribute.cs" />
+ <Compile Include="Configuration\RecommendedValueResloverAttribute.cs" />
+ <Compile Include="Configuration\StoragePathResloverAttribute.cs" />
+ <Compile Include="Configuration\StoragePathType.cs" />
<Compile Include="Configuration\UserConfiguration.cs" />
- <Compile Include="Controllers\AccountController.cs" />
- <Compile Include="Controllers\CandyControllerBase.cs" />
- <Compile Include="Controllers\GitController.cs" />
- <Compile Include="Controllers\HomeController.cs" />
- <Compile Include="Controllers\RepositoryController.cs" />
- <Compile Include="Controllers\SettingController.cs" />
- <Compile Include="Controllers\TeamController.cs" />
- <Compile Include="Data\MembershipService.cs" />
- <Compile Include="Data\RepositoryService.cs" />
<Compile Include="Entity\Entity\SSH密钥.Biz.cs" />
<Compile Include="Entity\Entity\SSH密钥.cs" />
<Compile Include="Entity\Entity\仓库.Biz.cs" />
@@ -393,67 +78,6 @@
<Compile Include="Entity\Entity\用户团队.cs" />
<Compile Include="Entity\Entity\认证日志.Biz.cs" />
<Compile Include="Entity\Entity\认证日志.cs" />
- <Compile Include="Extensions\CommitLogExtension.cs" />
- <Compile Include="Extensions\HtmlHelperExtension.cs" />
- <Compile Include="Extensions\MetadataExtension.cs" />
- <Compile Include="Filters\AdministratorAttribute.cs" />
- <Compile Include="Filters\AllowRegisterUserAttribute.cs" />
- <Compile Include="Filters\AllowRepositoryCreationAttribute.cs" />
- <Compile Include="Filters\CurrentUserOrAdministratorAttribute.cs" />
- <Compile Include="Filters\PublicServerAttribute.cs" />
- <Compile Include="Filters\ReadRepositoryAttribute.cs" />
- <Compile Include="Filters\RepositoryOwnerOrSystemAdministratorAttribute.cs" />
- <Compile Include="Filters\SmartAuthorizeAttribute.cs" />
- <Compile Include="Filters\SmartGitAttribute.cs" />
- <Compile Include="Filters\TeamOrSystemAdministratorAttribute.cs" />
- <Compile Include="Git\ArchiverAccessor.cs" />
- <Compile Include="Git\BlameAccessor.cs" />
- <Compile Include="Git\Cache\GitCacheAccessor.cs" />
- <Compile Include="Git\Cache\GitCacheReturn.cs" />
- <Compile Include="Git\CommitsAccessor.cs" />
- <Compile Include="Git\ContributorsAccessor.cs" />
- <Compile Include="Git\GitService.cs" />
- <Compile Include="Git\GitSshService.cs" />
- <Compile Include="Git\HistoryDivergenceAccessor.cs" />
- <Compile Include="Git\LastCommitAccessor.cs" />
- <Compile Include="Git\RepositorySizeAccessor.cs" />
- <Compile Include="Git\RevisionSummaryCacheItem.cs" />
- <Compile Include="Git\ScopeAccessor.cs" />
- <Compile Include="Git\SummaryAccessor.cs" />
- <Compile Include="Global.asax.cs">
- <DependentUpon>Global.asax</DependentUpon>
- </Compile>
- <Compile Include="Models\AheadBehindModel.cs" />
- <Compile Include="Models\BlameHunkModel.cs" />
- <Compile Include="Models\BlameModel.cs" />
- <Compile Include="Models\BlobType.cs" />
- <Compile Include="Models\BranchesModel.cs" />
- <Compile Include="Models\BranchSelectorModel.cs" />
- <Compile Include="Models\ChangePasswordModel.cs" />
- <Compile Include="Models\CollaborationModel.cs" />
- <Compile Include="Models\CommitChangeModel.cs" />
- <Compile Include="Models\CommitModel.cs" />
- <Compile Include="Models\CommitsModel.cs" />
- <Compile Include="Models\CompareModel.cs" />
- <Compile Include="Models\ContributorsModel.cs" />
- <Compile Include="Models\GitUrl.cs" />
- <Compile Include="Models\LoginModel.cs" />
- <Compile Include="Models\PathBarModel.cs" />
- <Compile Include="Models\RepositoryListModel.cs" />
- <Compile Include="Models\RepositoryModel.cs" />
- <Compile Include="Models\RepositoryModelBase.cs" />
- <Compile Include="Models\RepositoryScope.cs" />
- <Compile Include="Models\RepositoryStatisticsModel.cs" />
- <Compile Include="Models\SettingModel.cs" />
- <Compile Include="Models\SshModel.cs" />
- <Compile Include="Models\TagModel.cs" />
- <Compile Include="Models\TagsModel.cs" />
- <Compile Include="Models\TeamListModel.cs" />
- <Compile Include="Models\TeamModel.cs" />
- <Compile Include="Models\TreeEntryModel.cs" />
- <Compile Include="Models\TreeModel.cs" />
- <Compile Include="Models\UserListModel.cs" />
- <Compile Include="Models\UserModel.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Security\Token.cs" />
<Compile Include="Ssh\Algorithms\CipherInfo.cs" />
@@ -519,305 +143,19 @@
<Compile Include="Ssh\SshDataWorker.cs" />
<Compile Include="Ssh\SshServer.cs" />
<Compile Include="Ssh\StartingInfo.cs" />
- <Compile Include="Views\Account\Change.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Change.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Account\Create.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Create.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Account\Delete.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Delete.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Account\Detail.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Detail.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Account\Edit.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Edit.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Account\Forgot.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Forgot.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Account\Index.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Index.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Account\Login.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Login.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Account\Ssh.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Ssh.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Home\About.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>About.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Repository\Blame.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Blame.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Repository\Blob.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Blob.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Repository\Branches.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Branches.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Repository\Commit.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Commit.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Repository\Commits.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Commits.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Repository\Compare.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Compare.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Repository\Contributors.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Contributors.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Repository\Coop.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Coop.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Repository\Create.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Create.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Repository\Delete.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Delete.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Repository\Detail.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Detail.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Repository\Edit.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Edit.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Repository\Index.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Index.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Repository\Tags.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Tags.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Repository\Tree.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Tree.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Repository\_BlobPreview.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>_BlobPreview.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Repository\_BranchSelector.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>_BranchSelector.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Repository\_Diff.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>_Diff.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Repository\_GitUrlButton.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>_GitUrlButton.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Repository\_PathBar.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>_PathBar.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Repository\_ZipButton.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>_ZipButton.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Setting\Edit.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Edit.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Setting\ReGenSsh.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>ReGenSsh.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Setting\Restart.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Restart.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Shared\DisplayTemplates\Maps.generated.cs">
- <DependentUpon>Maps.cshtml</DependentUpon>
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- </Compile>
- <Compile Include="Views\Shared\DisplayTemplates\Members.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Members.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Shared\DisplayTemplates\YesNo.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>YesNo.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Shared\Error.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Error.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Shared\_Layout.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>_Layout.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Shared\_Pager.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>_Pager.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Team\Create.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Create.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Team\Delete.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Delete.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Team\Detail.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Detail.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Team\Edit.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Edit.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Team\Index.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Index.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\Team\Users.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>Users.cshtml</DependentUpon>
- </Compile>
- <Compile Include="Views\_ViewStart.generated.cs">
- <AutoGen>True</AutoGen>
- <DesignTime>True</DesignTime>
- <DependentUpon>_ViewStart.cshtml</DependentUpon>
- </Compile>
</ItemGroup>
<ItemGroup>
- <EmbeddedResource Include="App_GlobalResources\SR.resx">
- <Generator>PublicResXFileCodeGenerator</Generator>
- <LastGenOutput>SR.designer.cs</LastGenOutput>
- <SubType>Designer</SubType>
- </EmbeddedResource>
- <EmbeddedResource Include="App_GlobalResources\SR.fr.resx">
- <Generator>ResXFileCodeGenerator</Generator>
- <LastGenOutput>SR.fr.Designer.cs</LastGenOutput>
- <SubType>Designer</SubType>
- </EmbeddedResource>
- <EmbeddedResource Include="App_GlobalResources\SR.zh-Hans.resx">
- <Generator>PublicResXFileCodeGenerator</Generator>
- <LastGenOutput>SR.zh-Hans.Designer.cs</LastGenOutput>
- <SubType>Designer</SubType>
- </EmbeddedResource>
- <EmbeddedResource Include="Properties\Information" />
- <EmbeddedResource Include="Properties\CacheVersion" />
- </ItemGroup>
- <ItemGroup>
- <Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" />
+ <Content Include="Entity\GitCandy数据字典.htm" />
+ <Content Include="Entity\NewLife.GitCandy.xml" />
+ <Content Include="Entity\XCoder.tt">
+ <Generator>TextTemplatingFileGenerator</Generator>
+ <LastGenOutput>XCoder.cs</LastGenOutput>
+ </Content>
</ItemGroup>
<ItemGroup>
- <Folder Include="Areas\GitCandy\Models\" />
- <Folder Include="Areas\GitCandy\Views\Shared\" />
+ <None Include="Entity\set.config" />
</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>
- <PropertyGroup>
- <PreBuildEvent>powershell.exe -ExecutionPolicy Unrestricted "$(ProjectDir)PreBuild.ps1" '$(ProjectDir)'</PreBuildEvent>
- </PropertyGroup>
- <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
- <PropertyGroup>
- <ErrorText>这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包。有关更多信息,请参见 http://go.microsoft.com/fwlink/?LinkID=322105。缺少的文件是 {0}。</ErrorText>
- </PropertyGroup>
- <Error Condition="!Exists('..\packages\LibGit2Sharp.NativeBinaries.1.0.129\build\LibGit2Sharp.NativeBinaries.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\LibGit2Sharp.NativeBinaries.1.0.129\build\LibGit2Sharp.NativeBinaries.props'))" />
- </Target>
- <ProjectExtensions>
- <VisualStudio>
- <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
- <WebProjectProperties>
- <UseIIS>True</UseIIS>
- <AutoAssignPort>True</AutoAssignPort>
- <DevelopmentServerPort>0</DevelopmentServerPort>
- <DevelopmentServerVPath>/</DevelopmentServerVPath>
- <IISUrl>http://localhost:1796/</IISUrl>
- <NTLMAuthentication>False</NTLMAuthentication>
- <UseCustomServer>False</UseCustomServer>
- <CustomServerUrl>
- </CustomServerUrl>
- <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
- </WebProjectProperties>
- </FlavorProperties>
- </VisualStudio>
- </ProjectExtensions>
+ <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">